Java“求从1到10的阶乘的和”
程序员文章站
2022-08-13 20:19:17
一开始我写的代码是这样的:public class HelloWorld { public static void main(String[] args){ int i=1,t=1,sum=1,a=0; for(i=1;i<=10;i++) { for(t=1;t<=i;t++) { sum=sum*t; } a=a+sum; } System.out.println(a); }}感觉上自己...
一开始我写的代码是这样的:
public class HelloWorld {
public static void main(String[] args){
int i=1,t=1,sum=1,a=0;
for(i=1;i<=10;i++) {
for(t=1;t<=i;t++) {
sum=sum*t;
}
a=a+sum;
}
System.out.println(a);
}
}
感觉上自己没什么错误,但是运行的结果就是不正确的。后来问了室友,才找到错误所在。
以下为更正后代码:
public class HelloWorld {
public static void main(String[] args){
int i=1,t=1,sum=1,a=0;
for(i=1;i<=10;i++) {
for(t=1;t<=i;t++) {
sum=sum*t;
}
a=a+sum;
sum=1;
}
System.out.println(a);
}
}
所以错误在于,每次 t 的循环之后,sum 没有初始化。导致每次 t 的循环过后,sum 是以越来越大的值代入 i 的循环中的。
这个错误给了我很大的启发,以后在循环结构中,要注重“循环变量的初始化”。
哈,在跟正在学软件工程的高中同学说了这件事之后(我俩是高中同学,好朋友,现在都是大二),她说,写成这样也行:
public class HelloWorld {
public static void main(String[] args){
int i=1,sum=1,a=0;
for(i=1;i<=10;i++) {
sum*=i;
}
a+=sum;
System.out.println(a);
}
}
但是运行出来的结果是错误的。
更正后代码如下:
public class HelloWorld {
public static void main(String[] args){
int i=1,sum=1,a=0;
for(i=1;i<=10;i++) {
sum*=i;
a+=sum;
}
System.out.println(a);
}
}
所以问题在于,把"a+=sum"放在循环外,计算的就是10的阶乘。每次 sum*=i 之后,并不会把sum的值传给 a+=sum .
所以需要把"a+=sum"放进循环内,才可以使 i=1时求出 sum=sum* i=1 的值,此时 a=a+sum=1 .然后进行下次循环, sum = sum* i=2 ,此时 a=a+sum=3 .如此才可以使每次 i 的阶乘 sum 都可以被累加得 a .
本文地址:https://blog.csdn.net/m0_47423988/article/details/109274080
上一篇: 老哥,你拿反了