C++ 相同输入的不同表意文字和代码块输出(小阶乘)

C++ 相同输入的不同表意文字和代码块输出(小阶乘),c++,arrays,dynamic,C++,Arrays,Dynamic,下面的代码计算输入整数的阶乘。我在代码块中运行了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;

下面的代码计算输入整数的阶乘。我在代码块中运行了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;
}
#包括
#包括
使用名称空间std;
int main(){
int t,i,j,k,temp,进位=0,len=0;
scanf(“%d”、&t);
int*b=新的int;
int*a=新的int[t];
对于(i=0;i
只为
b
分配一个对象。之后,只有
b[0]
*b
有效。
b[k]
k
的值无效,而不是
0
。因此,程序具有未定义的行为

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

int *b=new int[200];
应该有用


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

int b[200];
结束


int*b=new int;
--为什么在这里使用指针?为什么不直接声明一个
int
?另外,我不明白你在程序中输入的是什么。你说你输入了
9
2
,但是你的程序显示
scanf
被循环调用。为什么不把数据硬编码到程序中,这样就不需要了没有人会感到困惑吗?谢谢,我现在知道了。但是为什么静态数组比动态数组更受欢迎有什么特别的原因吗?@NikhilKaushik,如果可以的话,有两个原因可以使用静态数组。动态数组需要更多的代码来管理分配和释放。使用动态分配的内存成本更高-运行成本更高时间必须做簿记工作。
int b[200];
int *b=new int[200];