10进制VS二进制——大整数进制转化

题目描述

    对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们乘B为A的二进制逆序数。     例如对于十进制数173,它的二进制形式为10101101,逆序排列得到10110101,其十进制数为181,181即为173的二进制逆序数。

输入描述:

    一个1000位(即10^999)以内的十进制数。

输出描述:

    输入的十进制数的二进制逆序数。
示例1

输入

173

输出

181
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string jinzhi(int oldbase,string str,int newbase)
{
    string ans="";
    int len=str.size();
    for(int i=0;i<len;)
    {
        int k=0;
        for(int j=i;j<len;j++)
        {
            int temp=(k*oldbase+str[j]-'0')%newbase;//得到的余数
            str[j]=(k*oldbase+str[j]-'0')/newbase+'0';//得到的商
            k=temp;
        }
        ans+=(k+'0');
        while(str[i]=='0')i++;
    }
    return ans;
}

//完全模拟手算除法,当某一位除以newbase有余数就应该乘newbase在加上下一位共同组成被除数继续除!

int main()
{
    string num;//十进制数
    while(cin>>num)
    {
        string b=jinzhi(10,num,2);
        string ans=jinzhi(2,b,10);
        reverse(ans.begin(),ans.end());
        cout<<ans<<endl;
    }
}


猜你喜欢

转载自blog.csdn.net/qq_38030194/article/details/80414329