1019 General Palindromic Number (20 分)
题目大意
给出两个整数a和b,问十进制的a在b进制下是否为回文数。是的话输出Yes,不是输出No。并且输出a在b进制下的表示,以空格隔开。
基本思路
将a转换为b进制形式,保存在int的数组里面,比较数组左右两端是否对称。
注意:
可以使用do-while方式计算数组arr,可以减少一步特例0的判断。
代码
#include <bits/stdc++.h>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
//求十进制的a在b进制下的结果,存放在数组arr中,index作为数组arr的下标
int arr[40],index=0;
do{
arr[index++]=a%b;
a=a/b;
} while (a!=0);
//判断十进制的a在b进制下是否为回文数
int flag=1;
for (int i = 0; i < index / 2; ++i) {
if(arr[i]!=arr[index-1-i]){
flag=0;
break;
}
}
//根据是否是回文数做出相应的输出
if(flag) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
for (int i = index-1; i >=0; --i) {
cout<<arr[i];
if(i!=0) cout<<" ";
}
}