题目链接:
https://pintia.cn/problem-sets/994805342720868352/problems/994805487143337984
题目大意:
给出一个十进制数,然后一个大于等于2的正整数,将十进制数转化成以此数为基的数,输出并判断其是否为回文数。
思路分析:
除基取余法 + 判断字符串是否为回文串。
除基取余法:
int num = 0;
do{ //将n转换为b进制数,结果保存在数组ans中
ans[num++] = n % b;
n /= b;
}while(n);
for(int i = num - 1; i >= 0; i--){//倒序输出数组ans,即b进制数。
printf("%d", ans[i]);
if(i) printf(" ");
}
参考代码:
#include <cstdio>
using namespace std;
int ans[31], num = 0; //10^9在基最小为的情况下,只有30位,故长度为31是够用的。
void dextobase(int n, int b){
int i = 0;
while(n){
ans[i++] = n%b;
n /= b; num++;
}
}
bool isPd(int s[]){
int i = 0;
while(i <= num/2){
if(s[i] != s[num -1 - i]) return false;
i++;
}
return true;
}
int main()
{
int n, b;
scanf("%d %d",&n, &b);
dextobase(n, b);
if(isPd(ans)) printf("Yes\n");
else printf("No\n");
for(int i = num - 1; i >= 0; i--){
if(i != num-1) printf(" ");
printf("%d",ans[i]);
}
return 0;
}