吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1542|回复: 4
收起左侧

[已解决] [洛谷][vs 2019] [c语言] 相同输入,输出不同

[复制链接]
smarth 发表于 2020-11-15 14:37
本帖最后由 smarth 于 2020-11-15 16:35 编辑

在洛谷上刷题目,求阶乘之和。
代码:
[C] 纯文本查看 复制代码
#include<stdio.h>
int factial(int n) {
    if (n == 0 || n == 1)
        return 1;
    else
        return n * factial(n - 1);
}
int main(void)
{
    int n;
    unsigned long long s = 0;
    scanf_s("%d", &n);
    for (int i = 1; i <= n; i++) {
        s += factial(i);
    }
    printf("%llu\n", s);

    return 0;
}

在vs中输入22,输出2845178393
而洛谷显示输入22,输出1177652997443428940313
好多次了,我在本地ide答案好好的,洛谷是另一种输出。
求解答!!!


/**
**谢谢各位啦,原因是数值溢出。这道题数目太大,不能单纯计算,我去找其他思路了
**/

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

浅暮丶千殇 发表于 2020-11-15 15:28
部分数值在不同的系统环境下 输出的结果也不同
裴Beta 发表于 2020-11-15 15:38
上面的函数返回值是int类型,n比较大的时候会溢出
EzGDNull 发表于 2020-11-15 16:06
[C] 纯文本查看 复制代码
#include<stdio.h>
unsigned long long factial(int n) {
//你改一下这个返回值类型为unsigned long long,输入22时,得到的结果是15508120799727188505,很明显连unsigned long long这个数据类型也溢出了
    if (n == 0 || n == 1)
        return 1;
    else
        return n * factial(n - 1);
}
int main(void)
{
    int n;
    unsigned long long s = 0;
    scanf_s("%d", &n);
    for (int i = 1; i <= n; i++) {
        s += factial(i);
    }
    printf("%llu\n", s);
 
    return 0;
}
 楼主| smarth 发表于 2020-11-15 16:33
EzGDNull 发表于 2020-11-15 16:06
[mw_shl_code=c,true]#include
unsigned long long factial(int n) {
//你改一下这个返回值类型为unsigne ...

谢谢。
这道题似乎不能用这个思路做。
我调试后发现22!本身在unsigned long long里,但阶乘之和就溢出了。需要找其他思路
再次感谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 11:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表