题目链接:http://dsalgo.openjudge.cn/huawen02/3/
题目大意就是将十进制数转换成二进制,难就难在十进制数的位数小于100位。
这就意味着不能用任意类型来存,只能用数组来存。
十进制转二进制十进制转二进制 十进制整数转换为二进制整数采用"除2取余,逆序排列"法。 具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
根据转换规则直接就能联想到大整数的除法,但这又比传统大整数的除法要简单,因为它的除数固定是2。
1. 对stu数组每一位 /2 得到新的被除数的对应位置的数字。
2. 当 i!= len-1 时,就要计算下一位是否需要 加上(前一位对2取余,再乘上10)。
3. 当 i == len-1 时, 意味着被除数到了最后一位了,就可以直接对2取余,得到result的相应位置的结果。
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
char stu[101];
char result[1000];
int len;
int main()
{
while(~scanf("%s",stu))
{
len = strlen(stu);
int beichushu_weiling = 1;
int k=0;
while(beichushu_weiling)
{
beichushu_weiling=0;
for(int i=0;i<len; ++i)
{
//检查除的结果是否为0
int linshi_beichushu = (stu[i]-'0')/2;
if(linshi_beichushu)
beichushu_weiling=1;
if(i==len-1)
{
//当是被除数最后一位时,就能直接得出余数是多少
result[k++] = (stu[i]-'0')%2+'0';
}
else
{
//一定要记住前一位的余数加到后一位,需要乘上10
stu[i+1] = (stu[i]-'0')%2*10+stu[i+1];
}
//用来得到新的被除数stu
stu[i] = linshi_beichushu+'0';
}
}
result[k]='\0';
//result的结果需要调转顺序
for(int i=0,j=k-1; i<j; i++,j--)
{
char temp = result[i];
result[i] = result[j];
result[j] = temp;
}
printf("%s\n",result);
}
return 0;
}