10进制与2进制的互相转化

10进制 VS 2进制

http://www.nowcoder.com/questionTerminal/fd972d5d5cf04dd4bb4e5f027d4fc11e

主要考察的就是大数的进制互化,了解人来做转换的原理就可以了。
因为按照算法转换完的新进制下的数刚好是颠倒的,而本题刚好要求颠倒后的二进制对应的十进制,所以可以直接连用两次convert函数,改变x和y即可。

#include<stdio.h>
#include<string.h>
int str[3000]; // 待处理的数
int ans[3000]; // 新进制下的数
int convert(int x,int y,int str[],int len) // x为原始进制,y为要转化的进制
{
    int size = 0,carry,i = 0;
    while(i<len)
    {
        carry = 0;
        for(int j = i;j<len;j++)
        {
            int t = (carry * x + str[j]) % y;
            str[j] = (carry * x + str[j]) / y;
            carry = t;
        }
        ans[size++] = carry;
        while(str[i]==0 && i<len) i++;
    }
    return size;
}

int main()
{
    char num[1000];
    int i;
    gets(num); // 先把十进制数按照字符一个一个读入
    for(i = 0;i<strlen(num);i++)
        str[i] = num[i]-'0'; // 转成int型存入str(以便在转换进制的时候进行乘除)
    str[i] = '\0';
    int size1 = convert(10,2,str,strlen(num)); // 先将原始的10进制数据转换成待求的二进制数
    for(i = 0;i<size1;i++)
        str[i]= ans[i]; // 把二进制赋回str以备下一次2进制转10进制。
    int size2 = convert(2,10,str,size1); // 2进制转10进制
    for(i = size2-1;i>=0;i--) // 倒序输出转换后的数
        printf("%d",ans[i]);
    printf("\n");
    return 0;
}
全部评论

相关推荐

头像
10-15 22:27
已编辑
门头沟学院 C++
罗格镇的小镇做题家:我投了hr打电话来说学历太低了不符合要求,建议投荣耀,结果荣耀也投了一定水花没有,非本211硕
投递华为等公司10个岗位
点赞 评论 收藏
分享
牛客771574427号:恭喜你,华杰
点赞 评论 收藏
分享
预计下个星期就能开奖吧,哪位老哥来给个准信
华孝子爱信等:对接人上周说的是这周
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务