gpt4 book ai didi

c++ - ideone 和 codeblocks 中相同输入的不同输出(小阶乘)

转载 作者:行者123 更新时间:2023-11-30 05:20:13 25 4
gpt4 key购买 nike

以下代码计算输入整数的阶乘。我在 Codeblocks 中运行了 2 个测试用例 - 9 和 2,并得到了正确的输出。对于相同的输入,ideone 将 2 的阶乘输出为 6,但它正确输出 9 的阶乘。出了什么问题?此外,当我将 b 设为大小为 200 的静态数组而不是动态数组时,ideone 会提供正确的输出。

#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int t,i,j,k,temp,carry=0,len=0;
scanf("%d",&t);
int *b=new int;
int *a=new int[t];
for (i=0;i<t;i++){
scanf("%d",&a[i]);
}
for (i=0;i<t;i++){
len=0;
b[0]=1;
for (j=1;j<=a[i];j++){
carry=0;
for (k=0;k<=len;k++){
temp=b[k]*j+carry;
b[k]=temp%10;
carry=temp/10;
}
while (carry!=0){
b[++len]=carry%10;
carry/=10;
}
}
for (j=len;j>=0;j--){
printf("%d",b[j]);
}
printf("\n");
}
return 0;
}

最佳答案

int *b=new int;

只为b分配一个对象。之后只有 b[0]*b 有效。 b[k] 对于0 以外的k 值无效。因此,您的程序具有未定义的行为。

如果大小为 200 的静态数组有效,则

int *b=new int[200];

应该可以。


如果数组的大小在编译时已知,我会建议使用数组而不是使用动态分配的内存。喜欢

int b[200];

结束

int *b=new int[200];

关于c++ - ideone 和 codeblocks 中相同输入的不同输出(小阶乘),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40780234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com