题目描述:
给出两个整数n、b,问十进制整数n在b进制下是否是回文数,若是,则输出Yes;否则,输出No。在此之后输出n在b进制下的表示。
单词:Palindromic Number--回文数;decimal--十进制的。
输入格式:
输入用空格分隔的两个数,第一个数是十进制数n(0<N≤109),第二个数是十进制数b( 2≤b≤109)。
输出格式:
第一行输出Yes或No,第二行输出十进制数n在b进制下的表示,用空格把每个数隔开,末尾不能有多余空格。
样例:
样例一:
输入:27 2
输出:第一行:Yes 第二行:1 1 0 1 1
样例二:
输入:121 5
输出:第一行:No 第二行:4 4 1
思路:
- 先将十进制数n转换为b进制数
- 对数进行判断,由数组,比较位置i和num-i-1的数,只要有一个数不同,就不是回文数。
注意点:
注意特殊数据,0的输出。
代码:
1 #include<iostream> 2 using namespace std; 3 4 //存储转换后的数的每一位数 5 int datas[48] = { 0 }; 6 7 int main() 8 { 9 int n, b, num = 0; 10 bool flag = true; 11 12 scanf("%d %d", &n, &b); 13 14 //进行进制转换 15 do 16 { 17 datas[num++] = n % b; 18 n /= b; 19 } while (n != 0); 20 21 //对转换后的数进行判断 22 for (int i = 0;i < num/ 2;i++) 23 { 24 if (datas[i] != datas[num - i - 1]) 25 { 26 flag = false; 27 break; 28 } 29 } 30 31 //输出判断结果 32 if (flag)printf("Yes\n"); 33 else printf("No\n"); 34 35 //输出转换结果 36 for (int i = num - 1;i >= 0;i--) 37 { 38 printf("%d", datas[i]); 39 if (i != 0)printf(" "); 40 } 41 42 return 0; 43 }View Code
参考书籍-《算法笔记》-胡凡