3:十进制数转二进制数(类似大整数除法)

题目链接:http://dsalgo.openjudge.cn/huawen02/3/

题目大意就是将十进制数转换成二进制,难就难在十进制数的位数小于100位。

这就意味着不能用任意类型来存,只能用数组来存。

十进制转二进制十进制转二进制 十进制整数转换为二进制整数采用"除2取余,逆序排列"法。 具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

根据转换规则直接就能联想到大整数的除法,但这又比传统大整数的除法要简单,因为它的除数固定是2。

1. 对stu数组每一位 /2 得到新的被除数的对应位置的数字。

2. 当 i!= len-1 时,就要计算下一位是否需要 加上(前一位对2取余,再乘上10)。

3. 当 i == len-1 时, 意味着被除数到了最后一位了,就可以直接对2取余,得到result的相应位置的结果。

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
char stu[101];
char result[1000];
int len;
int main()
{
    while(~scanf("%s",stu))
    {
        len = strlen(stu);
        int beichushu_weiling = 1;
        int k=0;
        while(beichushu_weiling)
        {
            beichushu_weiling=0;
            for(int i=0;i<len; ++i)
            {
                //检查除的结果是否为0
                int linshi_beichushu = (stu[i]-'0')/2;
                if(linshi_beichushu)
                    beichushu_weiling=1;
                if(i==len-1)
                {
                    //当是被除数最后一位时,就能直接得出余数是多少
                    result[k++] = (stu[i]-'0')%2+'0';
                }
                else
                {
                    //一定要记住前一位的余数加到后一位,需要乘上10
                    stu[i+1] = (stu[i]-'0')%2*10+stu[i+1];
                }
                //用来得到新的被除数stu
                stu[i] = linshi_beichushu+'0';
            }
        }
        result[k]='\0';
        //result的结果需要调转顺序
        for(int i=0,j=k-1; i<j; i++,j--)
        {
            char temp = result[i];
            result[i] = result[j];
            result[j] = temp;
        }
        printf("%s\n",result);
    }
    return 0;
}

    原文作者:进制转换
    原文地址: https://blog.csdn.net/kuangzhenxi/article/details/78194155
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞