A1019General Palindromic Number (20)

1019 General Palindromic Number (20)(20 分)

A number that will be the same when it is written forwards or backwards is known as a Palindromic Number. For example, 1234321 is a palindromic number. All single digit numbers are palindromic numbers.

Although palindromic numbers are most often considered in the decimal system, the concept of palindromicity can be applied to the natural numbers in any numeral system. Consider a number N > 0 in base b >= 2, where it is written in standard notation with k+1 digits a~i~ as the sum of (a~i~b^i^) for i from 0 to k. Here, as usual, 0 <= a~i~ < b for all i and a~k~ is non-zero. Then N is palindromic if and only if a~i~ = a~k-i~ for all i. Zero is written 0 in any base and is also palindromic by definition.

Given any non-negative decimal integer N and a base b, you are supposed to tell if N is a palindromic number in base b.

Input Specification:

Each input file contains one test case. Each case consists of two non-negative numbers N and b, where 0 <= N <= 10^9^ is the decimal number and 2 <= b <= 10^9^ is the base. The numbers are separated by a space.

Output Specification:

For each test case, first print in one line "Yes" if N is a palindromic number in base b, or "No" if not. Then in the next line, print N as the number in base b in the form "a~k~ a~k-1~ ... a~0~". Notice that there must be no extra space at the end of output.

Sample Input 1:

27 2

Sample Output 1:

Yes
1 1 0 1 1

Sample Input 2:

121 5

Sample Output 2:

No
4 4 1

思路:

            题目是英语的,能看懂多少是多少,看懂大概,然后参考给数的CASES,就可以大致猜到题目要求,A级的题做多了,就一些要求都是一样的,比如输出的每个数字中间相隔一个space(空格),ect.这道题我没看题,直接看的是题目给的Case

           这个题目是一个进制转化+回文数问题.

            1.先进行进制的转化

                     "除基取余":   10进制   基数      商         余数           用代码模拟这个过程输出的时候倒序输出,    

                                                 27          2        13           1                  

                                                 13          2          6            1

                                                  6           2           3           0

                                                  3           2           1           1

                                                  1           2            0          1

                 2. 27的2进制为11011,把每次的结果存在数组里面.

                           然后将数组头和尾往里进行对比用布尔型flag来记录Ta是不是回文数

            

#include <stdio.h>
#include <cstring>
int main(){
	int n,r,t=0;
	int res[33];
	bool flag=false;
	scanf("%d%d",&n,&r);
		//排除0
		if(n==0){
			printf("Yes\n0");
			return 0;
		} 
		//将n转化为r进制 
		while(n!=0){
			res[t]=n%r;
			n=n/r;
			t++;
		}
		for(int i=0;i<t;i++){
			if(res[i]==res[t-i-1]){
				flag=true;
			}else
			flag=false;
		}
		if(flag==true){
			printf("Yes\n");
		}else
			printf("No\n");
		 //printf result 
		for(int i=t-1;i>=0;i--){
			printf("%d",res[i]);
			t--;
			if(t>0){
				printf(" ");
			}
		}
	return 0; 
}

猜你喜欢

转载自blog.csdn.net/qq_40959340/article/details/81515688