3.5小节——问题 C: 进制转换

题目描述:

将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。

输入

多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)

输出

每行输出对应的二进制数。

样例输入

985
211
1126

样例输出

1111011001
11010011
10001100110

代码

此法具有普遍性

#include<cstdio>
#include<cstring>
int main(){
    char n[40];         //输入数组 
    int temp[40];       //中间处理数组 
    int output[200];    //输出数组 
    while(scanf("%s",n)!=EOF){
        int i;
        int length=strlen(n);
        memset(temp,0,sizeof(temp));         //将中间数组全部置0 
        for(i=0;i<length;i++)temp[i]=n[i]-'0';    //将字符转换成数字 
        int remain=0,j=0;         /*用来保留每一位上的商; 记录输出数组的长度;*/
        int sum; 
        do{
            sum=0;                  //用来计算余数是否为0
            for(i=0;i<length;i++){
                remain=temp[i]/2;
                sum+=remain;
                if(i<length-1)temp[i+1]+=(temp[i]%2)*10;
                else output[j++]=temp[i]%2;
                temp[i]=remain;
                }
        }while(sum); 
        for(i=j-1;i>=0;i--){
            printf("%c",output[i]+'0');
            if(i==0)printf("\n");
        }       
    }
    return 0;
}
    原文作者:codeup题目解答
    原文地址: https://blog.csdn.net/weixin_42114379/article/details/82318020
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞