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

【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 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序