以下是我对SPOJ问题的实施:http://www.spoj.com/problems/FCTRL2/
#include <stdio.h>
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int carry=0,k,i,j,num,arr[1000]={1};
scanf("%d",&num);
for(i=1;i<=num;i++)
{
for(j=0;j<=k;j++)
{
arr[j]=arr[j]*i+carry;
carry=arr[j]/10;
arr[j]=arr[j]%10;
}
while(carry)
{
k++;
arr[k]=carry%10;
carry/=10;
}
}
for(i=k;i>=0;i--)//doubt
{
printf("%d",arr[i]);
}
printf("\n");
}
return 0;
}
我猜在反向显示数组时出错,但是当我改变条件时,即(i = 0; i <= k; i ++)它会打印数组。 请帮我解决这个问题。
答案 0 :(得分:2)
int carry=0,k,i,j,num,arr[1000]={1};
for(j=0;j<=k;j++)
k
未在此处初始化,并且具有不确定的值。
请参阅https://stackoverflow.com/a/6212973/5708620
默认情况下,外部和静态变量初始化为零 保证。自动和寄存器没有en的变量 显式初始化程序将具有不确定的值(或者是 未指定的值或陷阱表示。)
答案 1 :(得分:0)
是的,这取决于编译器和操作系统版本。一般情况下,我猜你的情况可能已被分配了垃圾值。