以下代码计算输入整数的阶乘。我在Codeblocks中运行了2个测试用例 - 9& 2,得到正确的输出。对于相同的输入,ideone输出阶乘2为6但正确输出9阶乘。出了什么问题?另外,当我使用大小为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;
}
答案 0 :(得分:1)
int *b=new int;
仅为b
分配一个对象。之后,只有b[0]
或*b
有效。 b[k]
对k
以外的0
的值无效。因此,您的程序有不确定的行为。
如果大小为200的静态数组有效,那么
int *b=new int[200];
应该有用。
如果在编译时已知数组的大小,我建议使用数组而不是使用动态分配的内存。喜欢
int b[200];
在
int *b=new int[200];