1215787625 发表于 2023-11-8 08:46:37

小白求助

//求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?

isdkz 发表于 2023-11-8 08:46:54

在这段代码中,数组NUM的索引范围是0到MAX-1,即0到9999。在while循环中,k的初始值是MAX,即9999。然后,先执行了--NUM操作,将NUM的值减1,变为-1。然后再进行循环条件的判断,由于-1不等于0,所以循环继续执行。因此,最后在数组搜索中,搜到的第一个数是-1而不是0。

Mike_python小 发表于 2023-11-8 08:47:10

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]
查看完整版本: 小白求助