问题 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;
}