小白求助
//求100的阶乘#include <stdio.h>
#define MAX 10000
#define num 100
int main(void)
{
int NUM = {1};
int j,k;
for (j = 1;j <= num;j++){
for (k = 0;k < MAX;k++){//将各个元素乘以n
NUM *= j;
}
//判断是否要进位
for (k = 0;k < MAX-1;k++){
if (NUM >= 10)
NUM += NUM / 10;
NUM %= 10;
}
}
//找到后面第一个非零的数,从后向前输出
k = MAX;
while (--NUM == 0)
continue;
for (;k >= 0;k--)
printf("%d",NUM);
return 0;
}
打印100的阶乘。请问为什么最后在数组搜索中,搜到的第一个数是-1而不是0? 在这段代码中,数组NUM的索引范围是0到MAX-1,即0到9999。在while循环中,k的初始值是MAX,即9999。然后,先执行了--NUM操作,将NUM的值减1,变为-1。然后再进行循环条件的判断,由于-1不等于0,所以循环继续执行。因此,最后在数组搜索中,搜到的第一个数是-1而不是0。 C/C++交流
// 求100的阶乘
#include <stdio.h>
#define MAX 10000
#define num 100
int main(void)
{
int NUM = {1};
int j, k;
for (j = 1; j <= num; j++) {
for (k = 0; k < MAX; k++) { // 将各个元素乘以n
NUM *= j;
}
// 判断是否要进位
for (k = 0; k < MAX - 1; k++) {
if (NUM >= 10)
NUM += NUM / 10;
NUM %= 10;
}
}
// 找到后面第一个非零的数,从后向前输出
k = MAX;
while (--NUM == 0)
continue;
for (; k >= 0; k--)
printf("%d", NUM);
return 0;
}
在你提供的代码中,需要注意一下几点:
1. 在循环中找到后面第一个非零的数时,使用了 --NUM 来判断。这里可能会引起混淆,因为 --NUM 实际上是先减少 NUM 的值,然后再进行比较和判断。
2. 另外,由于数组下标是从 0 开始的,所以在打印时需要从 k 的值为 MAX-1 的位置开始,一直打印到 0 的位置。
针对你的问题,为什么最后在数组搜索中,搜到的第一个数是-1而不是0?这是因为在 while 循环中,--NUM 操作会导致 k 对应位置的值减少 1,并且 while 循环的条件是检查 NUM 是否等于 0,因此当 NUM 为 1 时,--NUM 操作会使得 NUM 变为 0,然后才进行循环体内的操作。因此,在循环结束后,k 对应位置的值实际上是 NUM - 1,也就是 -1。
为了解决这个问题,你可以将循环改成如下形式:
// 找到后面第一个非零的数,从后向前输出
k = MAX - 1;
while (NUM == 0 && k > 0) {
k--;
}
for (; k >= 0; k--)
printf("%d", NUM);
这样就可以正确地找到后面第一个非零的数,并从后向前输出。
希望这能帮助到你,如果还有其他问题,请随时向我提问。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页:
[1]