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