我的解題概念N最大為2,147,483,647=BIN[28]={0111,1111,1111,1111,1111,1111,1111,1111}
N+1>> 2,147,483,648=BIN[28]=1000,0000,0000,0000,0000,0000,0000,0000 總共進位了31次
先將N轉為二進制後,再把BIN[27]+1,Loop計算逢2進位的次數即可
#include <iostream>
#include <iomanip>
using namespace std;
int main(){
int N,BIN[32];
while(cin>>N&&N!=0){
int count=0;
for(int i=0;i<32;i++)
BIN[i]=0;
for(int i=31;i>=0;i--)
{
if(N>0)
{
BIN[i]=N%2;
N=N/2;
}
else
break;
}
BIN[31]=BIN[31]+1;
for(int i=31;i>=0;i--)
if(BIN[i]==2)
{
BIN[i]=BIN[i]%2;
BIN[i-1]=BIN[i-1]+1;
count++;
}
cout<<count<<endl;
}
return 0;
}