清华大学---二进制VS十进制(大数运算)

题目描述
对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们乘B为A的二进制逆序数。 例如对于十进制数173,它的二进制形式为10101101,逆序排列得到10110101,其十进制数为181,181即为173的二进制逆序数。
输入描述:
一个1000位(即10^999)以内的十进制数。
输出描述:
输入的十进制数的二进制逆序数。
示例1
输入
173
输出
181


代码参(chao)考(xi)的别人的,学习了

#include <stdio.h>
#include <string.h>
char ch1[1000],ch2[4000]; //ch1保存用户输入的10进制大整数,ch2保存ch1转换后的翻转的2进制
int num[1000]; //保存ch2转换的新的2进制大整数!
void Ten_two_convers(){ //十进制数转换成2进制数
    int len = strlen(ch1);
    int sum = 1;
    int flag = 0;
    int a;
    int b;
    while(sum){ //循环,当ch1字符数组每位都是0的时候,循环结束
        b = 0;
        sum = 0;
        ch2[flag++] = (ch1[len-1] - '0')%2 + '0';
        for(int i = 0; i < len; i++){
            if(b == 0){
                a = (ch1[i] - '0');
                ch1[i] = a/2 + '0';
            }else{
                a = ch1[i] - '0' + 10;
                ch1[i] = a/2 + '0';
            }
            if(a%2 == 0){    //此处一定是a%2,一
                b = 0;
            }else{
                b = 1;
            }
            sum = sum + a/2;
        }
    }
}
int Two_ten(){  //2进制数转换成10进制数!!!!!!这个思路是借鉴了这种思想:比如2进制1010 =(((0*2+1)*2+0)*2+1)*2+0=10

    int len2 = 1;
    num[0] = 0;
    for(int i = 0; i < strlen(ch2); i++){
        for(int j = 0; j < len2; j++ ){ //各位循环乘2
            if(j == 0){
                num[j] = num[j] * 2 + ch2[i] - '0';
            }else{
                num[j] = num[j] * 2;
            }
        }
        for(int j = 0; j < len2; j++){
            if(j == len2 - 1&&num[len2-1] >= 10){
                num[j] = num[j]%10;
                num[++j] = 1; //超过10就进位
                len2++;  //扩大一位
            }else if(num[j] >= 10){
                num[j] = num[j]%10; //超过10就进位
                num[j+1]++;
            }
        }
    }
    return len2;
}
int main(){
    while(scanf("%s",ch1) != EOF){
        memset(ch2,0, sizeof(ch2));  //将ch2清空
        Ten_two_convers();
        int len2 = Two_ten();
        for(int i = len2-1; i >= 0; i--){
            printf("%d",num[i]);
        }
        printf("\n");
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/rytyy/article/details/80503746
今日推荐