ZOJ 1078 Palindrom Numbers
Posted jinjin-2018
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZOJ 1078 Palindrom Numbers相关的知识,希望对你有一定的参考价值。
Palindrom Numbers
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1078
题目大意:判断一个数在2-16进制下是否为回文数,若是,输出所有满足条件的进制数。
注意点:网上看到一个相对较好的想法,把一个数化为某进制后直接逆序保留其十进制数的值与原数比较,相等即为回文数。
代码如下:
1 //Problem Name: Palindrom Numbers 2 //Source: ZOJ 1078 3 //Author: jinjin18 4 //Main idea: easy to solve 5 //Language: C++ 6 //====================================================================== 7 8 9 #include<stdio.h> 10 #include<vector> 11 12 using namespace std; 13 14 int isPalindrom(int n,int basis){ 15 int res = 0; //保存逆转之后的十进制 16 int copyn = n; 17 while(copyn){ 18 res *= basis; 19 res += copyn%basis; 20 copyn = copyn/basis; 21 } 22 if(n == res){ 23 return 1; 24 }else{ 25 return 0; 26 } 27 } 28 29 30 int main(){ 31 int n; 32 33 vector<int> data; 34 while(scanf("%d",&n)!=EOF&&n!=0){ 35 int sign = 0; 36 data.clear(); 37 for(int i = 2;i <= 16; i++){ 38 if(isPalindrom(n,i)){ 39 data.push_back(i); 40 sign = 1; 41 } 42 } 43 if(sign){ 44 printf("Number %d is palindrom in basis",n); 45 for(vector<int>::iterator it = data.begin();it != data.end();it++){ 46 printf(" %d",*it); 47 } 48 printf("\n"); 49 }else{ 50 printf("Number %d is not a palindrom\n",n); 51 } 52 } 53 54 55 return 0; 56 }
以上是关于ZOJ 1078 Palindrom Numbers的主要内容,如果未能解决你的问题,请参考以下文章