解题思路:刚来这个网站不久,看了前辈们写的题解,感觉有点沉长,题目种说5位数和6位数的,并且从小到大;我直接按顺序遍历10000到1000000(不包括)之间的数,把么一个数就求其回文和给位数字之和来判断时候复合要求;判断回文:数组也可以做到,但是在本题种使用本人的做法可以简单的将判断回文和求个位数字之和一起方便求得;比如给出1221:1221%10=1 ->1221/10=122 -> 1*10+122%10=12 ->122/10=12
->12*10+12%10=122 -> 12/10=1 -> 122*10+1%10=1221 得到1221与原来给出得相等;
在举个反例:123:123%10=3 -> 123/10=12 -> 3*10+12%10=32 -> 12/10=1 ->32*10+1%10=321;
123 != 321 故不是回文数;
求个位数字之和只用在求回文得时候 每次取余得到得数累加求和即可。
(刚开始使用这个,格式什么的还不会设置,望理解,谢谢)
注意事项:在判断回文的时候,记得用一个临时变量代替正在遍历的数,不然会影响遍历顺序,导致程序出错。
参考代码:
#include <stdio.h> int main(void) { int n, flag = 1; scanf("%d", &n); for(int i = 10000; i < 1000000; ++i) { int t = i, num = 0, sum = 0; while(t>0) { num = num*10 + t%10; sum += t%10; t /= 10; } if(num==i && sum==n) { flag = 0; printf("%d\n", i); } } if(flag) { printf("-1\n"); } return 0; }
0.0分
119 人评分
求解不知道是少考虑了哪种情况,一直是答案不对 #include<stdio.h> #include<iostream> using namespace std; int main() { int n,i,j,k,s=0;//各位数字之和,5-6位数 cin>>n; //5位数 for(i=1;i<10;i++) { for(j=1;j<10;j++) { for(k=1;k<10;k++) { if(i*2+j*2+k==n) { s+=i*2+j*2+k; cout<<i<<j<<k<<j<<i<<"\n"; } } } } //6位数 for(i=1;i<10;i++) { for(j=1;j<10;j++) { for(k=1;k<10;k++) { if(i*2+j*2+2*k==n) { s+=i*2+j*2+2*k; cout<<i<<j<<k<<k<<j<<i<<"\n"; } } } } //筛选出=-1的情况 if(s==0) { cout<<-1; } }
比如给出1221:1221%10=1 ->1221/10=122 -> 1*10+122%10=12 ->122/10=12 ->12*10+12%10=122 -> 12/10=1 -> 122*10+1%10=1221 得到1221与原来给出得相等; 不懂
5043张亚 2022-03-01 16:14:14 |
推了一遍 只能说牛逼
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:387 |
母牛的故事 (C语言代码)浏览:992 |
淘淘的名单 (C语言代码)浏览:1169 |
1024题解浏览:879 |
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:673 |
C语言程序设计教程(第三版)课后习题12.1 (C语言代码)浏览:689 |
简单的事情 (C语言代码)浏览:679 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:592 |
最好的,浏览:601 |
A+B for Input-Output Practice (I) (C语言代码)浏览:451 |