二进制vs十进制

一笑奈何 提交于 2019-12-06 07:06:43

题目描述

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

输入描述:

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

输出描述:

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

输入

复制
173

输出

复制
181

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
string f(int m,int n,string a)///将m进制转化为n进制
{
string b;
int l=a.size();
for(int i=0;i<l;)
{
int k=0;
for(int j=i;j<l;j++)
{
int t=(k*m+a[j]-'0')%n;
a[j]=(k*m+a[j]-'0')/n+'0';
k=t;
}
b+=char(k+'0');
while(a[i]=='0')i++;///跳过高位产生的0
}
return b;
}
int main()
{
string a,b,c;
while(cin>>a)
{
b=f(10,2,a);
c=f(2,10,b);
reverse(c.begin(),c.end());
cout<<c<<endl;
}
return 0;
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!