题目描述
对于一个十进制数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; } }