思路:
模拟短除法:
带入下面的代码,分析此方法。
111 //10进制初始值
num:055 ans:1
i:1
num:027 ans:11
num:013 ans:111
num:006 ans:1111
i:2
num:003 ans:11110
num:001 ans:111101
num:000 ans:1111011
i:3
1101111 //答案
大数 - 十进制转二进制:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
string num,ans="";
int temp,carry;
while(cin>>num){
int len=num.length();
for(int j=0;j<len;){
carry=0;
for(int i=0;i<len;i++){
temp=carry*10+num[i]-'0';
num[i]=temp/2+'0';
carry=temp%2;
}
ans+=(carry+'0');
while(num[j]=='0')
j++;
}
reverse(begin(ans),end(ans));
cout<<ans<<endl;
}
return 0;
}
大数 -任意进制之间转化:
#include <iostream>
#include <algorithm>
using namespace std;
string convery(string num,int m,int n){
string ans="";
int len=num.length();
for(int i=0;i<len;){
int carry=0,temp;
for(int j=0;j<len;j++){
temp=(carry*m+num[j]-'0');
num[j]=temp/n+'0';
carry=temp%n;
}
ans+=carry+'0';
while(num[i]=='0')
i++;
}
reverse(begin(ans),end(ans));
return ans;
}
int main()
{
string num;
cin>>num;
cout<<convery(num,10,2)<<endl;
return 0;
}