我试图创建一个C代码,找到一个整数的阶乘,以便我可以将我的代码转换为汇编语言。我的代码似乎将第二个整数“乘以”两次。即5 * 4 * 4 * 3 ......我似乎无法找出原因。请帮忙!
#define N 5
int main() {
int j = 0;
int i = 0;
int num1 = N;
int num2 = N - 1;
int sum = 0;
while (num2 != 0) {
while (j < num2) {
sum += num1;
j++;
}
j = 0;
printf("%d\n", sum);
printf("--------------\n");
--num2;
num1 = sum;
}
printf("--->%d", sum);
}
错误输出:
20
--------------
80
--------------
240
--------------
480
--------------
480
计算的步骤是不正确的:从较低的因子开始到较大的因子更简单。
这是一个更正版本:
#include <stdio.h>
#define N 10
int main() {
int i, j, num1, sum;
num1 = 1;
sum = 1;
for (i = 1; i <= N; i++) {
sum = 0;
for (j = 0; j < i; j++) {
sum += num1;
}
printf("%d! -> %d\n", i, sum);
printf("--------------\n");
num1 = sum;
}
return 0;
}
输出:
1! -> 1
--------------
2! -> 2
--------------
3! -> 6
--------------
4! -> 24
--------------
5! -> 120
--------------
6! -> 720
--------------
7! -> 5040
--------------
8! -> 40320
--------------
9! -> 362880
--------------
10! -> 3628800
--------------
如果添加一些中间调试输出,您将找到出错的地方:
#include <stdio.h>
#define N 5
int main()
{
int j = 0;
int i = 0;
int num1 = N;
int num2 = N - 1;
int sum = 0;
while (num2 != 0)
{
printf("1 -> num1=%d num2=%d sum=%d j=%d\n", num1, num2, sum, j);
while (j < num2)
{
sum += num1;
j++;
}
printf("2 -> num1=%d num2=%d sum=%d j=%d\n", num1, num2, sum, j);
j = 0;
printf("%d\n", sum);
printf("--------------\n");
--num2;
num1 = sum;
}
printf("--->%d", sum);
}
这会产生:
1 -> num1=5 num2=4 sum=0 j=0
2 -> num1=5 num2=4 sum=20 j=4
20
--------------
1 -> num1=20 num2=3 sum=20 j=0
2 -> num1=20 num2=3 sum=80 j=3
80
--------------
1 -> num1=80 num2=2 sum=80 j=0
2 -> num1=80 num2=2 sum=240 j=2
240
--------------
1 -> num1=240 num2=1 sum=240 j=0
2 -> num1=240 num2=1 sum=480 j=1
480
--------------
--->480
你可以在这里看到问题是sum
值是从每次通过循环传递的,当它真的应该每次都重置为0。所以加
sum = 0;
在while
循环的顶部。
所以你的最终代码变成:
#include <stdio.h>
#define N 5
int main()
{
int j = 0;
int i = 0;
int num1 = N;
int num2 = N - 1;
int sum = 0;
while (num2 != 0)
{
sum = 0;
while (j < num2)
{
sum += num1;
j++;
}
j = 0;
printf("%d\n", sum);
printf("--------------\n");
--num2;
num1 = sum;
}
printf("--->%d", sum);
}
祝你好运。