渴望学到知识的菜鸟


私信TA

用户名:ldhskd

访问量:29816

签 名:

这小伙子人行,能处!

等  级
排  名 117
经  验 7608
参赛次数 1
文章发表 48
年  龄 18
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

    先用暴力的方法穷举出所有的五、六位数

    然后再到循环里面判断,是否符合题目要求,符合则输出


    回文数就是从左往右看和从右往左看都是一样的,例如:12321     从右边往左边看还是12321

    接下来就是如何把这些转换成编程的思维

    

    正着和反着都一样,那就是这个数字反转后,和原来的值一样,那么,他就是回文数


    数字反转的代码:

while(num > 0)
{
    a = a * 10 + num % 10;    //a的初始值为0
    num = num / 10;
}

    例如:12321的反转

    先加上12321 % 10 的值 , 也就是 1

    之后,12321 / 10 = 1232

    然后再进行循环

    不过,1要先乘10 变成 10 之后 再加上 1232 % 10 = 2 ,所以最后的结果是12

    然后 1232 / 10 = 123

    之后一直这样的循环

    直到12321被除成了0 , 就可以退出循环了


        

    接下来还有一个题目的要求

    就是这些回文数中的每一个数加起来,要为一开始输入的值


    那我们就可以在之前的循环中,把每次模10的结果累加起来,再用这个数和一开始输入的数进行比较

    看是否相同



参考代码:

#include <stdio.h>
int main()
{
	int n , num;
	scanf("%d", &n);
	for (int i = 10000; i <= 999999; i++)
	{
		int t = i,t2 = i;
		int sum = 0, num = 0;
		while (t > 0)
		{
			sum += t % 10;
			num = num * 10 + t % 10;
			t /= 10;
		}
		
		if (sum == n && num == i)
			printf("%d\n", i);
	}
	return 0;
}


 

0.0分

11 人评分

  评论区