必威体育Betway必威体育官网
当前位置:首页 > IT技术

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

时间:2019-11-06 20:42:17来源:IT技术作者:seo实验室小编阅读:66次「手机版」
 

十进制数

题目描述

对于一个十进制数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;
}

文章最后发布于: 2018-05-29 23:26:52

相关阅读

二进制文件、文本文件

先说结论: 二进制文件和文本文件都是按照二进制存储的,只不过文本文件是把一个字节一个字节解读成字符,而二进制文件可以任意定义解

VS2017动态链接库(.dll)的生成与使用

这里以VS2017为例子,讲解一下动态链接库(.dll)的生成与使用。一、动态链接库(.dll)的生成1、打开:“文件”-“新建”-“项目”2、打开:“

VS2017 IronPython做界面

本人开始做毕设了,但老师说工具要有界面,所以就开始找python做界面的东西……之前做过C#的界面,脱拉拽很快界面就完成了,后来我查了下

【书法】楷书-颜体 vs 欧体

一个选择恐惧症患者的字体选择 刚开始学书法的时候,真的啥都不知道,也不了解颜体和欧体,就是抱着练练字的想法去的。就是学楷书嘛,学

win7-vs2012下安装.net frame work 的过程

第一,  vs和.net的对应关系大致如下vs2010----.net framework 4.0    vs2012----.net framework 4.5   vs2015----.net fram

分享到:

栏目导航

推荐阅读

热门阅读