PAT-进制转换-A1019 General Palindromic Number (20分)

题目描述:

  给出两个整数n、b,问十进制整数n在b进制下是否是回文数,若是,则输出Yes;否则,输出No。在此之后输出n在b进制下的表示。

  单词:Palindromic Number--回文数;decimal--十进制的。 

输入格式:

  输入用空格分隔的两个数,第一个数是十进制数n(0<N≤10​9),第二个数是十进制数b( 2≤b≤10​9)。

输出格式:

  第一行输出Yes或No,第二行输出十进制数n在b进制下的表示,用空格把每个数隔开,末尾不能有多余空格。

样例:

  样例一:

    输入:27 2

    输出:第一行:Yes     第二行:1 1 0 1 1

  样例二:

    输入:121 5

    输出:第一行:No      第二行:4 4 1

思路:

  1. 先将十进制数n转换为b进制数
  2. 对数进行判断,由数组,比较位置i和num-i-1的数,只要有一个数不同,就不是回文数。

注意点:

  注意特殊数据,0的输出。

代码:

PAT-进制转换-A1019 General Palindromic Number (20分)
 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

 

 

参考书籍-《算法笔记》-胡凡

上一篇:Shell入门,关于语法的一些简单玩意儿


下一篇:[MongoDB]count,gourp,distinct