gpt4 book ai didi

CodeChef 小阶乘解

转载 作者:行者123 更新时间:2023-11-30 21:44:45 27 4
gpt4 key购买 nike

当我运行这段代码时,为什么它给出了不正确的输出?在我的系统中,我得到了正确的输出。图中第一行是数字测试用例,后面是输入和输出。

#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;
}

输入和输出示例:

enter image description here

最佳答案

正如 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。

希望这有帮助!

关于CodeChef 小阶乘解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36387013/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com