查找 100 阶乘的逻辑错误
Logical error in finding 100 factorial
我正在尝试计算任何不超过 100 的整数的阶乘,但即将出现一些随机输出。
编译器代码块
https://www.codechef.com/problems/FCTRL2/
int main()
{
int t,i,n,x,j=1,temp=0;
cin>>t; //Number of test cases
int m=1;
int a[200];//Array to store maximum digit number
a[0]=1;
while(t>0)
{
cin>>n;
for(i=1;i<=n;i++)
{
for(j=0;j<m;j++)
{
x=a[j]*i+temp;
a[j]=x%10;
temp=x/10;
while(temp!=0)
{
a[m]=temp%10;
temp=temp/10;
m++;
}
}
}
for(j=m-1;j>=0;j--)
{
cout<<a[j];
}
cout<<"\n";
t--;
}
return 0;
}
当 while 循环修改 m
的值时,您的内部循环又执行了一次。那你需要跳出循环。
这是一个解决方案,
bool done = false;
...
for(i=1;i<=n;i++)
{
done = false;
for(j=0;j<m;j++)
{
x=a[j]*i+temp;
a[j]=x%10;
temp=x/10;
while(temp!=0)
{
a[m]=temp%10;
temp=temp/10;
m++;
done = true;
}
if (done) break;
}
}
首先,你的代码。它很丑。请使用更多的空格和评论。需要一段时间才能弄清楚某些变量代表什么。
考虑到这一点,我认为您需要将 for(j = 0; j < m; j++)
循环内的 for
和 while
循环分开。 while
循环不应在 for
循环中:
for(j = 0;j < m; j++)
{
x= a[j] * (i+temp);
a[j] = x%10;
temp = x/10;
}
while(temp != 0)
{
a[m] = temp%10;
temp /= 10;
m++;
}
^ 改为这样做。
我正在尝试计算任何不超过 100 的整数的阶乘,但即将出现一些随机输出。
编译器代码块
https://www.codechef.com/problems/FCTRL2/
int main()
{
int t,i,n,x,j=1,temp=0;
cin>>t; //Number of test cases
int m=1;
int a[200];//Array to store maximum digit number
a[0]=1;
while(t>0)
{
cin>>n;
for(i=1;i<=n;i++)
{
for(j=0;j<m;j++)
{
x=a[j]*i+temp;
a[j]=x%10;
temp=x/10;
while(temp!=0)
{
a[m]=temp%10;
temp=temp/10;
m++;
}
}
}
for(j=m-1;j>=0;j--)
{
cout<<a[j];
}
cout<<"\n";
t--;
}
return 0;
}
当 while 循环修改 m
的值时,您的内部循环又执行了一次。那你需要跳出循环。
这是一个解决方案,
bool done = false;
...
for(i=1;i<=n;i++)
{
done = false;
for(j=0;j<m;j++)
{
x=a[j]*i+temp;
a[j]=x%10;
temp=x/10;
while(temp!=0)
{
a[m]=temp%10;
temp=temp/10;
m++;
done = true;
}
if (done) break;
}
}
首先,你的代码。它很丑。请使用更多的空格和评论。需要一段时间才能弄清楚某些变量代表什么。
考虑到这一点,我认为您需要将 for(j = 0; j < m; j++)
循环内的 for
和 while
循环分开。 while
循环不应在 for
循环中:
for(j = 0;j < m; j++)
{
x= a[j] * (i+temp);
a[j] = x%10;
temp = x/10;
}
while(temp != 0)
{
a[m] = temp%10;
temp /= 10;
m++;
}
^ 改为这样做。