题目链接
误区:
一开始我错误的以为使用string就可以解决,没有看好题目中的b的范围,题目中b可以远大于10,所以输出的时候只能有数字,而且是可以大于10的,如果使用字符串,那么一个大于10的数就无法很好地表示。
解题思路:
求进制转换,可采用除b取余,然后倒序输出即可!使用int型数组来改写程序,首先要确定数组的大小,如果是int的最大值,那么除以b的最小值2的话,最多除以32次,所以数组可以开到110大小即可。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include <iostream> #include <string> #include <sstream> const int maxn=110; using namespace std; int nums[maxn]; int main(){ int n,b,k=0; cin>>n>>b; if(n==0) nums[k++]=0; while(n!=0){ nums[k]=n%b; n/=b; k++; } int end=k-1; bool isP=true; for(int i=0;i<=end;i++){ if(nums[i]!=nums[end-i]) isP=false; } if(isP) cout<<"Yes"<<endl; else cout<<"No"<<endl; for(int i=end;i>=0;i--){ if(i!=end) cout<<" "; cout<<nums[i]; } return 0; }
|