Augenstern... 2022-02-20 16:36 采纳率: 75%
浏览 38
已结题

pta 6-10阶乘计算升级版 借鉴了很多人的好不容易写出了一个自己能理解的 可是不知道怎么回事大于12之后的好像不能运行一样 改了很多次都没改对

img

img


void Print_Factorial ( const int N ){
    int n=N;
    int j;
    int result=1;
    if(n<0||n>1000){
        printf("Invalid input");
    }else if(n==0){
        printf("1");
    }else if(n>=0&&n<=12){
        for(int i=1;i<=n;i++){
            result*=i;
        }
        printf("%d",result);
    }
    else{
        int number[3000]={0};//先初始化全部元素为零
        number[0]=1;//第一位先为一
        int temp=1;//用来记录每一位和i相乘的临时结果
        int k=0;//用来记录当前最大的下标
        int carry=0;//来自低位数的进位
        for(int i=2;i<=n;i++){
            /*遍历数组*/
            for(j=0;j<=k;j++){
            /*数组中的每一个数字分别与i相乘*/
                temp=number[j]*i+carry;
                number[j]=temp%10;//留下真正的位数,其余的暂存在carry里等待下次计算时进位
                carry=temp/10;//计算出下一轮要进位的数
            }while(carry)//最后一轮进行完了但carry还有数没有进位
            {
                number[j++]=carry%10;//数组里加一个下标储存carry里没有进位的数
                carry/=10;
                k++;
            }
        }
        for(int u=k;u>0;u--){//数组里已储存好各位数,然后从最后一个下标开始输出
            printf("%d",number[j]);
        }
    }
}
  • 写回答

2条回答 默认 最新

  • 谛凌 2022-02-20 18:18
    关注

    其实你看没有通过测试的点都是数据位数很多的情况,这个时候你就需要考虑,是不是自己设置的数据类型不合适
    你写的大于12的情况,是想用数组记录结果的每一位吗

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题