cr:经典
题目21
求1+2!+3!+...+20!的和。
思路:
要计算的是1的阶乘加到20的阶乘,可以分别计算20个阶乘的结果,最后再加起来。
每一个阶乘的和通过for循环来计算,不断累加。
代码:
#include<stdio.h>
main()
{
long double sum[20], sum2 = 0;
int i, j;
for (i = 0; i < 20; i++) {
sum[i] = 1;
for (j = 1; j <= i + 1; j++) {
sum[i] *= j;
}
}
for (i = 0; i < 20; i++) {
sum2 = sum2 + sum[i];
}
printf("%f\n", sum2);
}
对方:
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鸟教程. All rights reserved.
//
#include <stdio.h>
int main()
{
int i;
long double sum,mix;
sum=0,mix=1;
for(i=1;i<=20;i++)
{
mix=mix*i;
sum=sum+mix;
}
printf("%Lf\n",sum);
}
反思&收获:
对方的做法比我的简单,我的是做完20个阶乘后再加起来;而对方是不断累加,利用mix的值是上一个阶乘的结果,直接乘以下一个阶乘的最后一项数字,得到结果。
对于结果很长的数字,不能用int类型的变量,可以使用double类型,或long double类型的变量。
cr:小林
例21
C语言实现打印菱形。
思路:
分成两部分完成,上半部分为前四行,*的数量递增;下半部分为后三行,*的数量递减。for循环。
代码:
#include<stdio.h>
main()
{
int i, j;
for (i = 1; i <= 4; i++) {
for (j = 1; j <= 4 - i; j++) {
printf(" ");
}
for (j = 1; j <= 2 * i - 1; j++) {
printf("*");
}
printf("\n");
}
for (i = 3; i >= 1; i--) {
for (j = 1; j <= 4 - i; j++) {
printf(" ");
}
for (j = 1; j <= 2 * i - 1; j++) {
printf("*");
}
printf("\n");
}
}
对方:
反思&收获:
还是有些不熟练。