题目大意:
给定一个十进制数n,求该十进制数转换为b进制后的序列是否为回文序列。
思路:
1.进制转换,10进制n转换为b进制,除积取余法,ans[表示结果],输出时倒着遍历
也可以用栈,但是本题要判断回文序列,数组更方便。
do {
ans[num++] = n % b;
n /= b;
} while (n != 0);
2.判断回文序列,num为数位个数
bool flag = true;
for (int i = 0; i <= num / 2; i++) {
if (ans[i] != ans[num - i - 1]) {
flag = false;
break;
}
}
3.输出
倒叙输出数组,最后一个字符之后不能有空格
AC代码:
//PAT_A 1019
#include<cstdio>
using namespace std;
int main() {
int n, b, num = 0, ans[50];
bool flag = true;
(void)scanf("%d %d", &n, &b);
do {
ans[num++] = n % b;
n /= b;
} while (n != 0);
for (int i = 0; i <= num / 2; i++) {
if (ans[i] != ans[num - i - 1]) {
flag = false;
break;
}
}
if (flag == true)printf("Yes\n");
else printf("No\n");
for (int i = num - 1; i >= 0; i--) {
printf("%d", ans[i]);
if (i != 0)printf(" ");
}
return 0;
}