思路类似大数的10进制转16进制,不赘述。
https://blog.csdn.net/Ideaddxxpp/article/details/90183498
#include <bits/stdc++.h>
using namespace std;
int main()
{
while(1)
{
cout<<"请输入十进制数"<<endl;
string str1;
string result="";
cin>>str1;
int len=str1.size();
int i=0;
for(int i=0;i<len;i++)
{
if(str1[i]<48||str1[i]>57) //0的ascll码是48,9的ascll码值为57
{
cout<<"输入了非法字符"<<endl;
return 0;
}
}
while(1)
{
int cnt=0;
while(i<len&&str1[i]=='0')//拦截掉输入为0的情况,并且跳过局部除数前无效的0
i++;
if(i==len)
break;
for(;i<len;i++)
{
int sum=cnt*10+(str1[i]-'0');
str1[i]=char(sum/2+'0');
cnt=sum%2;
}
i=0;
result=char(cnt+'0')+result;
}
if(result=="")
cout<<0<<endl<<endl;
else
cout<<result<<endl<<endl;
}
return 0;
}