“大”数据的进制转换
题目描述
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
输出
每行输出对应的二进制数。
样例输入
985
211
1126
样例输出
1111011001
11010011
10001100110
思路展示
由于当前的数比较大,无法使用int 和long long存储,所以使用字符数组存储,
核心代码如下:
for(int j = 0;j<len;j++){
int t = (k *m +s[j] -'0')%n;
s[j] = (k *m +s[j] -'0')/n +'0';
k = t;
}
完整代码
#include<stdio.h>
#include<string.h>
char result[32];
// m 表示原先的进制数 n 表示变换后的进制数 s表示用字符数组存数据
void conservatemton(int m,char *s,int n){
for(int i =0;i<32;i++){//每次都要初始化
result[i] = '\0';
}
int len = strlen(s);
int k,lastn = 0;
for(int i = 0;i<len;){
k = 0;
for(int j = i;j<len;j++){
int t = (k *m +s[j] -'0')%n;//余数
s[j] = (k *m +s[j] -'0')/n +'0';
k = t;
}
result[lastn ++] = (char)(k + '0');
while(s[i] == '0')
i++;
}
for(int k = lastn -1;k>=0;k--){
printf("%c",result[k]);
}
printf("\n");
}
int main(){
char str[40];
while(~scanf("%s",str)){
conservatemton(10,str,2);
}
return 0;
}