(算法练习)——进制转换
程序员文章站
2024-03-17 13:30:16
...
要求:
http://codeup.cn/problem.php?cid=100000579&pid=2
说明:
这一题特别要注意输入数字的位数不超过30,实际上已经超出long long的范围了,也就是说输入的数据要用字符串来存,对应的算法也要改。。。
代码:
(这个是用long long定义的,明显输入数据变大时输出就不对了……)
#include <stdio.h>
long long n;
struct record{
int numm;
int recordnum[1000];
}recordnumm[1000];
int main(){
int signal = 0;
while(scanf("%lld",&n) != EOF){
int num = 0;
do{
recordnumm[signal].recordnum[num++] = n %2;
n /= 2;
}while(n != 0);
recordnumm[signal].numm = num;
signal++;
}
for(int i = 0;i <signal;i++){
for(int j = recordnumm[i].numm - 1;j >= 0;j--){
printf("%d",recordnumm[i].recordnum[j]);
}
printf("\n");
}
}
参考大神的代码:
#include<cstdio>
#include<cstring>
int main()
{
char str[1000];
int i,a[1000],res[1000];
while(~scanf("%s",str))
{
int k=strlen(str),len=strlen(str),num=0;
while(len>0)
{
res[num++]=(str[k-1]-'0')%2;
int carry=0;
for(i=0;i<k;i++)
{
int s=((str[i]-'0')+10*carry)/2;
carry=(str[i]-'0')%2;
str[i]=s+'0';
}
while(str[k-len]=='0')
len--;
}
for(i=num-1;i>=0;i--)
printf("%d",res[i]);
printf("\n");
}
return 0;
}