要求
找出 0 - 1000 之内,符合每一位的数字之和等于 15的数字。
举例:78 ,168 ,1167。
方法一:嵌套循环
思路
1、外循环:获取范围中的每一位数字 0 - 1000
i:0 - 1000
2、内循环:处理这个数字
每一位的数字之和等于15
#include <stdio.h>
int main()
{
int i = 0;
printf("请输入一个整数:");
scanf_s("%d",&i);
//输入1000
for (int num = 0; num <= i; num++)
{
int sum = 0;
//Tip
int num1 = num;
while(num1 != 0)
{
//获取最右边的数字
int temp = num1 % 10;
//将每次获取的数字相加
sum += temp;
//去掉当前获取的数字
num1 /= 10;
}
if (sum == 15)
printf("%d\n", num);
}
return 0;
}
注意点(代码中Tip处)
遇到问题
如果此处用 num 进入 while 循环,从第一次出了 while 循环之后值就变成了 0 ,无法参与后续循环。
解决方案
需要一个新的变量在进入循环之前先存储 num 的值,然后代替 num 进入循环。
方法二:函数
思路
与方法一类似,只不过是将循环的嵌套改成了函数的调用
#include <stdio.h>
//定义一个函数,用于计算一个整数各位数字的和
int EveryNumSum(int num)
{
int sum = 0;
while (num > 0)
{
sum += num % 10;
num = num / 10;
}
return sum;
}
int main()
{
int n;
printf("请输入一个整数:");
scanf_s("%d", &n);
//输入1000,遍历 0 到 1000 之间的所有数字
for (int i = 0; i <= n; i++)
{
if (EveryNumSum(i) == 15)
{
//打印
printf("%d\n", i);
}
}
return 0;
}
总结
此题是基于回文数的基础之上加以优化,只是有些小细节方面需要注意一下。