以下代码计算输入整数的阶乘。我在2个测试用例-9&2并获得正确的输出。对于相同的输入,IDEONE输出阶乘为6,但它正确输出9阶乘。怎么了?同样,当我使B成为200个尺寸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];