首先是借鉴了前辈的网址奉上:蓝桥杯历届试题-回文数字 (C语言代码)最简洁的解法(对应解法一)
[历届试题]回文数字 (时间复杂度比优质题解的要低)(对应解法二)
解题思路:
都是用遍历,回文数字的判定和回文数字数位和与输入数字是否相等的判定。
解法一是将五位数和六位数全遍历一遍;而解法二只遍历五位数或六位数的第一位和第二位,第三位由输入数字n和第一二位的数字决定,降低了时间复杂度。
注意事项:
没有满足条件的,输出:-1 。其他详见代码注释。
参考代码:
解法一:
#includeint main(){ int n,i,flag=1; scanf("%d",&n); for(i=10000;i0) { num=num*10+t%10; sum+=t%10; t/=10; }//循环结束后num就等于i的倒序数字,如果num和i相等则i是回文数字 if(num==i&&sum==n)//sum进行数位和的计算 { flag=0; printf("%d\n",i); } } if(flag) printf("-1"); return 0; }//五位数和六位数的全部遍历,对计算机来说也用不了太多时间
解法二:
#includeint main() { int n,flag=1; scanf("%d",&n); int i,j,k; for(i=1;i<=9;i++) for(j=0;j=0)&&(k<10)) { flag=0; printf("%d%d%d%d%d\n",i,j,k,j,i); } } for(i=1;i<=9;i++) for(j=0;j=0)&&(k/2<10))//六位数的时候这里的k实际上最中间的两个数的和,一个数的二倍一定是偶数,所以k一定是偶数。 { flag=0; printf("%d%d%d%d%d%d\n",i,j,k/2,k/2,j,i); } } if(flag) printf("-1"); return 0; }//两重循环第一二位,第三位利用n和一二位求得,先进行五位数的判断,再进行六位数的判断
为什么提交的时候标题太短会刷新啊,害得我重新打了一遍!呜呜呜!!!
0.0分
6 人评分
#include<stdio.h> int huiwen(int n) { int x, s = 0; x = n; while (1) { s = s * 10 + x % 10; x = x / 10; if (s == n) { return 1; break; } } } int main() { int sum, i; scanf("%d", &sum); for (i = 10000; i < 1000000; i++) { if (huiwen(i) == 1) { if ((i % 10 * 2 + i / 10 % 10 * 2 + i / 100 % 10) == sum) printf("%d", i); else if ((i % 10 * 2 + i / 10 % 10 * 2 + i / 100 % 10) == sum) printf("%d", i); else
大小写转换 (C语言代码)浏览:904 |
简单的a+b (C语言代码)浏览:752 |
A+B for Input-Output Practice (V) (C语言代码)浏览:640 |
【蟠桃记】 (C语言代码)浏览:697 |
【蟠桃记】 (C语言代码)浏览:1084 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:645 |
Quadratic Equation (C语言代码)浏览:1034 |
1134题解(求分析)浏览:795 |
C语言程序设计教程(第三版)课后习题8.2 (C语言代码)浏览:1108 |
小O的数字 (C语言代码)浏览:1490 |