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;
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章