当我运行此代码时,为什么它会给我错误的输出? 在我的系统中,我得到了正确的输出。在图像中,第一行是数字测试用例,后跟输入和输出。
#include <stdio.h>
int main()
{
double fact;
int k,i,m,n;
scanf("%d", &n);
for (i=n; i>0; i--)
{
fact=1;
scanf("%d", &m);
for(k=2; k<=m; k++)
fact *= k;
printf("%.0lf\n", fact);
}
return 0;
}
输入和输出示例:
答案 0 :(得分:0)
正如M Oehm在评论中指出的那样,问题在于您使用的数据类型。它太小,不能存储像100这样的数字因子,它包含大约157个数字。您需要使用数组来存储数字。这是我解决问题的方法(法官已接受)。
#include<stdio.h>
int main()
{
int t,j;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
int a[1000] = {1};
int m = 0;
int carry = 0;
for(int i=1; i<=n; i++)
{
for(j=0; j<=m; j++)
{
a[j] = (a[j]*i)+carry;
carry = a[j]/10;
a[j] = a[j]%10;
}
while(carry)
{
m++;
a[m] = carry%10;
carry/=10;
}
}
for(int i=m; i>=0; i--)
printf("%d",a[i]);
printf("\n");
}
return 0;
}
编辑:我发布的原始代码是用C ++编写的;但由于问题已被标记为C,我已编辑了上述C代码。
希望这有帮助!
答案 1 :(得分:0)
问题是您使用 double 来存储将是远程的阶乘输出。只需将输出转换为 BigInteger.for this first cast to string 然后 to bigint 。
/* package codechef; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.math.BigInteger;
/* Name of the class has to be "Main" only if the class is public. */
class Main
{
public static void main(String args[]) {
Scanner sc=new Scanner(System.in);
int t=sc.nextInt();
if(t>=1 && t<=100) {
while(t>=1) {
int n=sc.nextInt();
if(n>=1 && n<=100) {
BigInteger f=BigInteger.ONE;
while(n>1) {
f=f.multiply((new BigInteger (String.valueOf(n))));
n--;
}
System.out.println(f);
}
t--;
}
}
sc.close();
}
}
//this code is accepted