相同输入的IDEONE和CODEBLOCK中的不同输出(小阶乘)



以下代码计算输入整数的阶乘。我在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];

最新更新