这是我的第一个博客。本人目前是C语言的自学阶段,在学习过程中遇到一些想分享的代码就会发到博客里。希望能帮助到其他和我一样的人。
题目:实现n的阶乘
while循环实现
int main()
{
int n = 0 ;
int sum = 1 ;
int i = 0 ;
printf("请输入数字:");
scanf_s("%d",&n);
while (i <= n)
{
sum *= i;
i++;
}
printf("%d", sum);
return 0;
}
for循环实现
int main()
{
int n = 0 ;
int sum = 1 ;
int i = 0 ;
printf("请输入数字:");
scanf_s("%d",&n);
for (i = 1; i <= n; i++)
{
sum *= i;
}
printf("%d", sum);
return 0;
}
相比于while循环,for循环更简洁,而且平时书写代码时for循环使用的场景会更多。
题目:计算 1!+2!+3!+......+10!
在for循环的基础上改进
int main()
{
int n = 0;
int ret = 1;
int i = 0;
int sum = 0;
for (n = 1; n <= 10; n++)
{
ret = 1;
for (i = 1; i <= n; i++)
{
ret *= i;
}
sum += ret;
}
printf("%d", sum);
return 0;
}
这个代码的思路是,算出1到10的阶乘,然后分别相加。在书写for循环时,左开右闭是一个良好的书写方法,这样会比较直观。
但是上述代码的时间复杂度太高,为了优化代码,我们可以改善一下思路。3!其实就是在2!的基础上再乘3,4!是在3!的基础上再乘4,优化后的代码如下所示。
int main()
{
int n = 0;
int ret = 1;
int sum = 0;
for (n = 1; n <= 10; n++)
{
ret *= n;
sum += ret;
}
printf("%d", sum);
return 0;
}
这样可以大大提高时间复杂度。