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 }

猜你喜欢

转载自www.cnblogs.com/jinjin-2018/p/8976826.html
ZOJ
今日推荐