KY30进制转换
1.最开始没有考虑到大数问题,可以说是没考虑完全,输入类型使用的是int64_t,只ac了一半测试用例。所以在数很大找不到合适的数据类型存储时,要考虑使用string来存放。
2.使用string存放数字的时候就要考虑:字符和数字之间的转换。字符转换成数字:str[i]-'0',数字转换成字符:int+'0'。
3.竖式除法的模拟过程(就是将一个数m中的每一位反复除以要除的数n,直到除为0)要注意理解,并且注意外层循环的迭代是根据某一位是否被整除为0。
string transfer(string s,int m,int n)
{
int len=s.length();
string ans="";
//模拟竖式除法
for(int i=0;i<len;)
{
int remain=0;
for(int j=i;j<len;++j)
{
int temp=(remain*m+s[j]-'0')%n;//转为整型
s[j]=(remain*m+s[j]-'0')/n+'0';//转为字符
remain=temp;
}
ans+=char(remain+'0');
while(s[i]=='0')i++;
}
reverse(ans.begin(),ans.end());
return ans;
}
int main()
{
string num_10;//当无法用数据类型存放时记得用字符串存放
while(cin>>num_10)
{
cout<<transfer(num_10,10,2)<<endl;
}
return 0;
}