回文数字

历届试题 回文数字 


问题描述
  观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。

  本题要求你找到一些5位或6位的十进制数字。满足如下要求:
  该数字的各个数位之和等于输入的整数。
输入格式
  一个正整数 n (10<n<100), 表示要求满足的数位和。
输出格式
  若干行,每行包含一个满足要求的5位或6位整数。
  数字按从小到大的顺序排列。
  如果没有满足条件的,输出:-1
样例输入
44
样例输出
99899
499994
589985
598895
679976
688886
697796
769967
778877
787787
796697
859958
868868
877778
886688
895598
949949
958859
967769
976679
985589
994499
样例输入
60
样例输出
-1

思路

没什么好说的,对付这种数据直接暴力枚举就行。

AC

 1 #include<iostream>
 2 
 3 using namespace std;
 4 
 5 // 计算回文数之和 
 6 int sum(int x)
 7 {
 8     int s = 0;
 9     while(x)
10     {
11         s += (x%10);
12         x /= 10;
13     }
14     return s;
15 }
16 // 判断是否为回文数 
17 bool get(int x)
18 {
19     int i = 0;
20     int a[7] = {0};
21     while(x)
22     {
23         a[i] = x%10;
24         i++;
25         x /= 10;
26     }
27     if(i == 5 && a[0] == a[4] && a[1] == a[3])
28         return true;
29     if(i == 6 && a[0] == a[5] && a[1] == a[4] && a[2] == a[3])
30         return true;
31     return false;    
32 }
33 
34 //
35 bool sure(int n)
36 {
37     int c = 0;
38     for(int i=10001;i<=999999;i++){
39         if(get(i) && sum(i) == n){
40             cout<<i<<endl;
41             c++;
42         }
43     }
44     if(c == 0){
45         cout<<"-1"<<endl;
46         return false;
47     }
48  } 
49 
50 int main()
51 {
52     int n;
53     while(cin>>n)
54     {
55         sure(n);
56     }
57 
58     return 0;
59 }
View Code

 

posted @ 2019-01-12 19:50  maybeTang  阅读(826)  评论(0编辑  收藏  举报