在C中计算因子导致错误的答案

时间:2014-10-04 03:14:25

标签: c factorial

我试图解决有关codechef的问题。问题如下:

我必须找到数n的阶乘(1 <= n <= 100)。具体问题是here

我写了以下代码来解决它。

#include<stdio.h>

int main() {

    int ar[160],m,temp,temp1,t,x,i,j;
    scanf("%d",&t);
    int n[t];
    for(i=0;i<t;i++)
        scanf("%d",&n[i]);
    for(j=0;j<t;j++)
    {
        temp1=n[j];
        if(n[j]==100)
        {
            ar[0]=0;
            ar[1]=0;
            ar[2]=1;
            m=3;
        }
        else if(n[j]<100&&n[j]>=10)
        {
            ar[0]=temp1%10;
            ar[1]=temp/10;
            m=2;
        }
        else if(n[j]<10)
        {
            ar[0]=temp1%10;
            m=1;
        }
        n[j]=n[j]-1;
        while(n[j]>=1)
        {
            temp=0;
            for(i=0;i<m;i++)
            {
                x=ar[i]*n[j]+temp;
                ar[i]=x%10;
                temp=x/10;
            }
            while(temp>0)
            {
                m=m+1;
                ar[m-1]=temp%10;
                temp=temp/10;
            }
            n[j]=n[j]-1;
        }
        for(i=m-1;i>=0;i--)
            printf("%d",ar[i]);
        printf("\n");
    }
    return 0;
}

但我对评估的答案是错误的。但是我的代码在Ideone.com和我的机器上的gcc上正常运行。经过多次代码后,我无法确定我的错误?如果你们能指出任何错误,我将非常感激。

1 个答案:

答案 0 :(得分:0)

我跑了这个:

gcc -o a a.c
echo 100 $(seq 1 100) | ./a

n = 10的情况明显被破坏(它产生输出00),但许多其他线看起来还不错。

快速查看在n = 10时解析输入的代码,显示出错字:&#34; temp&#34;应该是&#34; temp1&#34;。