为什么输入22输出了负数

求阶乘之和

#include<stdio.h>
int main()
{
    int number[50];
    int i=1,v=1,sum=0,cnt=0,n;
    scanf("%d",&n);
    
    //计算并储存每次阶乘的和 
    while ( cnt<n ) {
        while ( i<=n ) {
        v=v*i;
        i++;
        printf("%d\n",number[cnt]);
        cnt++;
        }
    }
    //将所有储存的数相加 
    int j=0;
    if ( cnt>=0 ) {
        while ( j<cnt ) {
            sum+=number[j];
            j++;
        }
    }
    printf("%d\n",sum);
    
    return 0;
}

引用 皆我百晓生 小程序回复内容作答:
输入22时输出负数的问题出现在以下两处:

  1. 在计算阶乘时,变量v没有重置为1。在while循环的每一次迭代中,变量i都会递增,而变量v没有重置为1,导致每次阶乘的结果都会叠加在一起,而不是重新计算。解决方法是在while循环的开始部分,将v重置为1。

  2. 在计算并储存每次阶乘的和时,数组number没有正确地储存每一次阶乘的结果。在while循环的每一次迭代中,应该将阶乘的结果存入数组number中的相应位置。解决方法是在while循环的最后,在cnt递增之前,将阶乘的结果存入数组number中。

以下是修改后的代码:

#include<stdio.h>
int main()
{
    int number[50];
    int i=1,v=1,sum=0,cnt=0,n;
    scanf("%d",&n);
    
    //计算并储存每次阶乘的和 
    while ( cnt<n ) {
        v = 1; // 重置v为1
        i = 1; // 重置i为1
        while ( i<=cnt+1 ) { // 在每次阶乘的过程中,将结果存入数组number中
            v = v * i;
            i++;
        }
        number[cnt] = v; // 将阶乘的结果存入数组number中
        cnt++;
    }
    
    //将所有储存的数相加 
    int j=0;
    while ( j<cnt ) {
        sum+=number[j];
        j++;
    }
    printf("%d\n",sum);
    
    return 0;
}

修改后的代码能够正确计算并输出阶乘的和。

数字太大溢出了

num都没有初始化

int就装个12的阶乘,用longlong。
number[cnt]没有赋值就输出了,输出值不确定。

13行错了,你是打印了值,但是未赋值所以是随机的

【以下回答由 GPT 生成】

首先,代码中存在几个问题:

  1. 在数值计算之前,没有将number[cnt]赋值为v,导致储存的值始终为0。
  2. 内层循环的结束条件应该是i<=cnt而不是i<=n,否则会无限循环。
  3. 外层循环的结束条件应该是cnt<n而不是i<=n,否则会无限循环。
  4. 内层循环中,需要将i的初始值设为1,确保每个阶乘从1开始计算。

下面是修改后的代码:

#include<stdio.h>

int main()
{
    int number[50];
    int i=1, v=1, sum=0, cnt=0, n;
    scanf("%d", &n);

    //计算并储存每次阶乘的值
    while ( cnt<n ) {
        v = v * i;  // 计算阶乘值
        number[cnt] = v;  // 储存阶乘值到数组中
        i++;  // i自增1
        cnt++;  // cnt自增1
    }

    //将所有储存的数相加
    int j=0;
    if ( cnt>=0 ) {
        while ( j<cnt ) {
            sum += number[j];
            j++;
        }
    }
    printf("%d\n", sum);

    return 0;
}

请注意,上述代码只计算了从1到n的阶乘,如果想要计算阶乘的和,需要将内层循环的结束条件修改为i<=cnt

希望以上解决方案能够帮到你!如果有任何疑问,请随时提问!



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^