考察知识:
运算符、逻辑表达式、关系表达式。
循环结构及嵌套循环。
分支结构。
数组。
解题思路:
1、定义数组并将其元素全部赋值为0,用于储存整数逐位分离后的数。
2、利用循环遍历1到10000间所有整数。
3、利用嵌套循环实现整数的逐位分离,接下来以整数1234为例分析嵌套循环程序功能:
a、取个位数字,并将所得数存放到数组中。如第一次循环:a[0]=1234%10=4 第二次循环:a[1]=123%10=3……
b、每次循环,都将丢弃个位数字,成为一个新数字。如第一次循环:1234 / 10 = 123 第二次循环:123 / 10 = 12……
4、计数器更新次数比分离后所得数的数量多1,即多执行了一次j++,故需要j--。
5、利用嵌套循环计算分离后各位数的立方和。
6、嵌套if语句判断i是否为水仙花数。注意符号为“==”而不是“=”。
代码:
#include<stdio.h>
#include<math.h>
int main()
{
int a[5] = { };//定义数组并将其元素全部赋值为0,用于储存整数逐位分离后的数
int n = 0, count = 0;
for (int i = 1; i <= 10000; i++)//利用循环遍历1到10000间所有整数
{
int j = 0, sum = 0;
n = i;//将i的值赋给n
for (j; n > 0; j++)//利用嵌套循环实现整数的逐位分离,接下来以整数1234为例分析8到13行程序功能
{
a[j] = n % 10;//取个位数字,并将所得数存放到数组中。如第一次循环:a[0]=1234%10=4 第二次循环:a[1]=123%10=3……
n /= 10; //每次循环,都将丢弃个位数字,成为一个新数字。如第一次循环:1234 / 10 = 123 第二次循环:123 / 10 = 12……
}
j--;//计数器更新次数比分离后所得数的数量多1,即多执行了一次j++,故需要j--
for (j; j >= 0; j--)//利用嵌套循环计算分离后各位数的立方和
sum = sum + pow(a[j], 3);
if (sum == i)//嵌套if语句判断i是否为水仙花数。注意符号为“==”而不是“=”
{
printf("%d\n", i);
count++;
}
}
printf("共%d个", count);
return 0;
}方法优化:
逐位分离整数与计算各位数立方和在同一个循环中进行
优化方法代码:
#include<stdio.h>
#include<math.h>
int main()
{
int i, s, n, d, count = 0;
for (i = 1; 1 <= 10000; i++)
{
s = 0;
n = i;
while (n != 0)
{
d = n % 10;//分离各位数字
s = s + pow(d,3);//计算各位数三次方的和
n = n / 10;
}
if (s == i) //判断是否为水仙花数
{
printf("%d\n", i);
count++;
}
}
printf("共%d个\n", count);
return 0;
}运行结果:

该代码示例使用C语言通过遍历1到10000的整数,逐位分离数字并计算立方和,来找出水仙花数(每位数字立方和等于其本身的数)。首先定义数组存储分离的数字,然后通过嵌套循环实现数字分离和立方和计算,最后通过if语句判断是否为水仙花数。经过优化,将逐位分离和立方和计算合并到同一个循环中,提高了效率。
1353

被折叠的 条评论
为什么被折叠?



