#13918: C++ AC


kev8067@gmail.com (卓承緯)

學校 : 不指定學校
編號 : 74409
來源 : []
最後登入時間 :
2018-01-11 15:15:59
a414. 位元運算之進位篇 -- c910335 | From: [223.140.49.78] | 發表日期 : 2018-05-15 17:45

我的解題概念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;
}

 
ZeroJudge Forum