題目描述
對於一個十進制數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;
}
}