相同输入的ideone和codeblock中的输出不同(小因子)

时间:2016-11-24 07:24:31

标签: c++ arrays dynamic

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

1 个答案:

答案 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];