#include <stdio.h> long Fact(int x); int main() { int m = 100; for (m = 100; m <= 999; m++) { if (Fact(m) == m) printf("%d\n", m); } return 0; } long Fact(int x) { int sum = 0, a, b, c; int h=1,j=1,k=1,i=0; a = x / 100; b = x / 10 % 10; c = x % 10; for (i=0;i<a;i++ ) { h*= ( h+ 1); } for (i=0;i< b;i++) { j *= (j + 1); } for (i= 1;i < c;i++) { k *= (k+ 1); } sum = h + j + k; long s = (long)sum; return s; }帮我看一下这段有什么问题
时间: 2023-07-15 13:13:07 浏览: 154
#include <stdio.h>
4星 · 用户满意度95%
这段代码的问题比较多,具体如下:
1. `long Fact(int x)` 函数中的循环计算不正确,可以修改为如下代码:
```
for (i=1; i<=a; i++) {
h *= i;
}
for (i=1; i<=b; i++) {
j *= i;
}
for (i=1; i<=c; i++) {
k *= i;
}
```
2. 函数 `Fact(int x)` 的返回值类型为 `long`,但是函数中的变量 `sum` 的类型为 `int`,这会导致函数返回的结果不正确,可以将 `int sum` 修改为 `long sum`。
3. 在主函数中,循环判断的条件应该是 `m <= 999`,而不是 `m < 999`。
综上所述,修改后的代码如下:
```
#include <stdio.h>
long Fact(int x);
int main() {
int m = 100;
for (m = 100; m <= 999; m++) {
if (Fact(m) == m) printf("%d\n", m);
}
return 0;
}
long Fact(int x) {
long sum = 0, a, b, c;
int h=1,j=1,k=1,i=0;
a = x / 100;
b = x / 10 % 10;
c = x % 10;
for (i=1; i<=a; i++) {
h *= i;
}
for (i=1; i<=b; i++) {
j *= i;
}
for (i=1; i<=c; i++) {
k *= i;
}
sum = h + j + k;
return sum;
}
```
阅读全文