用C++实现:特殊回文数
试题 基础练习 特殊回文数
资源限制
时间限制:1.0s   内存限制:512.0MB
问题描述
  123321是一个非常特殊的数,它从左边读和从右边读是一样的。
  输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
  输入一行,包含一个正整数n。
输出格式
  按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定:1<=n<=54。
思路:直接从10000开始遍历至999999即可,一个循环解决
1 #include<iostream> 2 using namespace std; 3 int main(void) 4 { 5 int n; 6 cin >> n; 7 int a, b, c, d, e, f, sum; //这个sun是为了验证是否为回文数 8 for (int i = 10000; i < 999999; i++) 9 { 10 if (i / 100000 == 0) //5位数 11 { 12 a = i % 10; 13 b = ((i - a) / 10) % 10; 14 c = ((((i - a) / 10) - b) / 10) % 10; 15 d = ((((((i - a) / 10) - b) / 10) - c) / 10) % 10; 16 e = ((((((((i - a) / 10) - b) / 10) - c) / 10) - d) / 10) % 10; 17 int sum = a * 10000 + b * 1000 + c * 100 + d * 10 + e * 1; 18 if (sum == i && a + b + c + d + e == n) 19 { 20 cout << sum << endl; 21 } 22 } 23 else //6位数 24 { 25 a = i % 10; 26 b = ((i - a) / 10) % 10; 27 c = ((((i - a) / 10) - b) / 10) % 10; 28 d = ((((((i - a) / 10) - b) / 10) - c) / 10) % 10; 29 e = ((((((((i - a) / 10) - b) / 10) - c) / 10) - d) / 10) % 10; 30 f = ((((((((((i - a) / 10) - b) / 10) - c) / 10) - d) / 10) - e) / 10) % 10; 31 int sum = a * 100000 + b * 10000 + c * 1000 + d * 100 + e * 10 + f; 32 if (sum == i && a + b + c + d + e + f == n) 33 { 34 cout << sum << endl; 35 } 36 } 37 } 38 return 0; 39 }
需要注意的几个问题:
(1):sum的作用。根据余数的计算方式,不难看出这里的sum是倒着来算的,这么做是为了验证这个数是不是回文数。如果sum不和i相等,就说明i不是回文数。
(2):5位数和6位数要分开讨论,不要混在一起。
(3):注意每一位数是如何算出来的。当然了,根据运算符号“/”的性质这里在算每一项的时候,没有必要减去a,b,c,d,e。因为在做出发的时候会自动舍弃余数。
再来分享一个网上看到的其他做法:
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ 5 6 int main(int argc, char *argv[]) { 7 using std::cout; 8 int i,j; 9 int n; 10 cin>>n; 11 int a[100]; 12 for(i=1;i<=9;i++) //五位十进制数,第五位不为0 13 { 14 for(j=0;j<=9;j++) 15 { 16 if(((i+j)*2<=n) && ((i+j)*2>=n-9)) 17 { 18 cout<<i<<j<<(n-i-i-j-j)<<j<<i<<endl; 19 } 20 } 21 } 22 23 int f,g,h; 24 for(f=1;f<=9;f++) //既然是六位十进制数,则第六位不为0 25 { 26 for(h=0;h<=9;h++) 27 { 28 for(g=0;g<=9;g++) 29 if((f+f+h+h+g+g)==n) 30 {cout<<f<<h<<g<<g<<h<<f<<endl; 31 } 32 } 33 } 34 35 return 0; 36 }
代码原文链接:https://blog.csdn.net/weixin_44503667/article/details/104321410

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号