(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹)
目录
第1关:求各位数字之积:
题目:
本关任务:计算正整数
num
的各位上的数字之积。 例如:输入:
2583
经过----(2x5x8x3) 输出:240
输入:
102
经过----(1x0x2) 输出:0
输入:
136
经过----(1x3x6) 输出:18
代码思路:
代码思路:既然是求各位数字之积,就要把输入的数sum各位数字求出来,那如何求出各位数字呢?既然sum是整型,我们可以用sum%10的方式求出sum的个位整数,而十位即以上的整数则需要sum/10来将其变换为个位。最后用while循环来保证操作的持续实现,且保证其>0
代码表示:
#include<stdio.h> int main(void) { /*********Begin*********/ int num,a,b=1; scanf("%d",&num); while(num!=0) { a=num%10; num=num/10; b*=a; } printf("%d",b); /*********End**********/ return 0; }
提示:这里的a是用来取得sum各位的整数,然后与被初始化为1的变量b循环相乘得到结果
第2关:求阶乘之和:
题目:
本关任务:编写一个程序,任意输入n,求S=1!+2!+...+n!。 注意:n!表示n的阶乘。0的阶乘等于1,负数的阶乘等于0。 *提示:(n+1)!=n!(n+1)**
例如:
输入:10
输出:4037913
输入:7
输出:5913
输入:-1
输出:0
代码思路:
代码思路:既然是阶乘之和,那就需要一个两层循环,第一层用来循环1~n,第二层用来循环每个数的阶乘,第二层的数 j 就<= i 。注意:这里的s用来表示第二层的阶乘,所以在第二层循环完回到第一层以后要重新初始化为1。
代码表示:
#include<stdio.h> int main(void) { /*********Begin*********/ int n; int SUM=0; scanf("%d",&n); for(int i=1;i<=n;i++) { int S=1; for(int j =1;j<=i;j++) { S*=j; } SUM=SUM+S; } printf("%d",SUM); /*********End**********/ return 0; }
第3关:水仙花数:
题目:
本关任务:求出所有的水仙花数。
提示:所谓水仙花数是指一个三位数,其各位数字的立方和等于该数字本身。
例如: 153
是一个水仙花数,因为153=1^3+5^3+3^3
。例如:
370
是一个水仙花数,因为370 = 3^3 +7^3 + 0^3
代码思路:
代码思路:判断一个数是否为水仙花数,首先要看其是否为三位数,可以用for循环筛选,然后就是要计算每一位的立方之和 ,pow (x,y) 函数用来求 x 的 y 次方的值,和上面第一题一样,每一次循环都要/10,以此确保%10可以取得a的所有位值,最后判断各位的立方和是否等于原数
代码表示:
#include<stdio.h> int main(void) { /*********Begin*********/ int a = 0; for (a = 100; a < 1000; a++) { int tmp = a; int sum = 0; while (tmp) { sum += (int)pow(tmp % 10, 3); tmp /= 10; } if (a == sum) { printf("%d ", a); } } /*********End**********/ return 0; }
第4关:寻找完数:
题目:
本关任务:一个数如果恰好等于它的因子之和,这个数就称为"完数"。
例如,
6
的因子为1、2、3
,而6=1+2+3
,因此6
是"完数"。 编程序找出1000
之内的所有完数。
代码思路:
代码思路:因子之和,首先就要找到因子,我们可以通过遍历的方式,用%找出所有因子(因子一定小于等于原数的一半)然后将其逐个相加,若相加后sum的值等于原数,就将其打印
代码表示:
#include<stdio.h> int main() { int i, j; for (i = 2; i <= 1000; i++) { int sum = 0; for (j = 1; j <= i / 2; j++) { if (i % j == 0) sum += j; } if (sum == i) printf("%d\n", sum); } return 0; }
第5关:分数求和:
题目:
本关任务:编写程序计算
1 - 1/2 + 1/3 - 1/4 + ..... +1/99 - 1/100
的值,并显示出来(保留结果为小数点后三位)。
代码思路:
代码思路:这题可能看起来很复杂,但只要仔细分析其中的逻辑,方法就会很简单。在我看来,单位数相加,双位数相减是这题的难点,我们不妨将其看为一个整体,那么100个相加减的数字就变为了50组有序的相加的数,通过for循环将其分母每次加2即可
代码表示:
#include<stdio.h> int main() { double sum = 0; double a = 1; double b = 2; double c = 0; for (int i = 1; i <= 50; i++) { c = 1 / a - 1 / b; a += 2; b += 2; sum = sum + c; } printf("%.3lf", sum); return 0; }