问题 B: Hz的进制
时间限制: 1 Sec 内存限制: 128 MB提交: 20 解决: 14
[提交][状态][讨论版]
题目描述
输入
输出
样例输入
1
-5
样例输出
1
31
提示
#include<stdio.h> int main() { int n,i,j,s,a[35]; while(~scanf("%d",&n)) { s=0; if(n>=0) { while(n) { if(n%2==1) { s++; } n/=2; } } else { i=0; n=-n; while(n) { a[i]=n%2; n/=2; i++; }//将得到的每一个余数存到a[i]里 s=32-i; for(j=0;j<i;j++) { if(a[j]==1) a[j]=0; else a[j]=1; }取反 a[0]=a[0]+1;//取反后加一 for(j=0;j<i;j++) { a[j+1]=a[j+1]+a[j]/2; a[j]=a[j]%2; }进位 for(j=0;j<i;j++) { if(a[j]==1) s++; } } printf("%d\n",s); } return 0; }