タイトル説明
30進までの長さは、非負整数出力を2進数に変換される数字。
エントリー
データの複数のセット、30以下小数非負整数の長さの挙動のそれぞれ。
(数ではなく整数30bitsの、進数30が有していてもよいことに注意してください)
輸出
出力の各行に対応する二進数。
サンプル入力
985
211
1126
サンプル出力
1111011001
11010011
10001100110
#include <stdio.h>
#include <string.h>
int main()
{
char d[32];
int ans[100];
while(scanf("%s",d)!=EOF)
{
int sum=1,i=0,num[32],t,len=strlen(d);
for(int j=0; j<len; j++)
num[j]=d[j]-'0'; //将字符型数字转换为数字
while(sum)
{
sum=0; //用于进行循环,当所得的数剩1,除以2得0时结束
for(int j=0; j<len; j++)
{
t=num[j]/2;
sum+=t;
if(j==len-1) //如果是此数的最后一位,直接除二取余
ans[i++]=num[j]%2;
else
num[j+1]+=(num[j]%2)*10; //操作后得到的余数加上下一位数
num[j]=t; //得到商
}
}
for(int j=i-1; j>=0; j--) //逆向取余
printf("%d",ans[j]);
printf("\n");
}
return 0;
}
結果:
実装プロセス:
例えば、NUM 2の初期配列、numが23のためのループの後11なり、ANS [0] = 1; numが後のサイクル0~5ために長くなり、ANS [1] = 1; numが後のサイクルのために長くなります0 2、ANS [2] = 1; numが後のサイクル0 1ために長くなり、ANS [3] = 0; numが後のサイクル0のために長くなり、ANS [4] = 1。最後に、逆の出力は配列をANS。