花辞树dor 2023-01-10 16:58 采纳率: 100%
浏览 25
已结题

【PTA-C语言】6-10 阶乘计算升级版 代码调试bug

题目来源

img

地址:https://pintia.cn/problem-sets/14/exam/problems/742
错误信息

img

img

思路地址:https://blog.csdn.net/DeskOneRice/article/details/128632266?spm=1001.2014.3001.5501
代码内容

void Print_Factorial(const int N)
{
    if (N < 0)
        printf("Invalid input");
    else if (N == 0)
        printf("1");
    else
    {
        int sum[100000]; //数组要足够大
        int weishu = 0;
        for (int n = N, i = 0; n != 0; n /= 10, i++)
            sum[i] = n % 10, weishu++;  //将N存入数组sum,作为和的初始值
        for (int n = N - 1; n != 1; n--)
        {
            int temp, up = 0;
            int weishu_temp = 0;
            for (int i = 0; i < weishu; i++)    //sum是几位数就乘几次
            {
                temp = sum[i] * n + up;
                sum[i] = temp % 10, weishu_temp++;
                up = temp / 10;
                if (up != 0 && i == weishu - 1) //最高位乘完还需要进位,另外考虑
                {
                    for (int j = 1; up != 0; up /= 10, j++)
                        sum[i + j] = up % 10, weishu_temp++;
                }
                if (i == weishu - 1)    //退出循环前,更新和的位数
                {
                    weishu = weishu_temp;
                    break;
                }
            }
        }
        for (int i = weishu - 1; i >= 0; i--)   //将和的各数字倒序输出
            printf("%d", sum[i]);
    }
    return;
}

img

问题:算的是18的阶乘,此处调试点是从18算到*14,仅仅少了一个j++,就出现了这种情况。数字没有超出整型范围,为什么前面出现了一串不明数字,还是负的?按理来说,在少了j++的情况下应该是 128160,求解答,非常感谢!

  • 写回答

1条回答 默认 最新

  • 花辞树dor 2023-01-10 17:36
    关注

    我懂了, j++ 少了,因为10是两位数,位数+2,但是始终只有 sum[i+j] (此处 j=1 不变)在变,相当于位数只+1,最后倒序输出时数组内多出的那一位数(即最高位)是随机值(数组未初始化,否则为0)。
    感谢浏览,已结题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月10日
  • 已采纳回答 1月10日
  • 创建了问题 1月10日

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同