经常有点小迷糊 2021-09-16 20:20 采纳率: 96.7%
浏览 49
已结题

我的代码错在了哪里?


#include <bits/stdc++.h>
using namespace std;
int factorial(int n) {
    unsigned long long a = 1;
    for (int i = 1; i <= n; i++) {
        a *= i;
    }
    return a;
} 
int main() {
    unsigned long long m, n;
    cin >> m >> n;
    unsigned long long a1 = factorial(n);
    unsigned long long a2 = factorial(m) * factorial(n - m);
    cout << a1 / a2 << endl;
    return 0;
}

为啥输入19 20时输出168245652527而不是20?

  • 写回答

4条回答 默认 最新

  • 关注

    因为你的factorial返回的是int,所以虽然fac里面用了ull,但是在返回的时候被截断了
    将fac的返回值改为unsigned long long即可
    代码修改如下,有帮助望采纳

     
    #include <bits/stdc++.h>
    using namespace std;
    unsigned long long factorial(int n) {
        unsigned long long a = 1;
        for (int i = 1; i <= n; i++) {
            a *= i;
        }
        return a;
    } 
    int main() {
        unsigned long long m, n;
        cin >> m >> n;
        unsigned long long a1 = factorial(n);
        unsigned long long a2 = factorial(m) * factorial(n - m);
        cout << a1 / a2 << endl;
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 1月31日
  • 已采纳回答 1月23日
  • 创建了问题 9月16日

悬赏问题

  • ¥15 目详情-五一模拟赛详情页
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b