C语言:阶乘的高精度计算 您所在的位置:网站首页 c语言程序设计n的阶乘 C语言:阶乘的高精度计算

C语言:阶乘的高精度计算

2024-07-07 21:55| 来源: 网络整理| 查看: 265

前言

计算一个正整数的阶乘在思路上并不难,难的是当这个正整数足够大时,编程语言的整型数据类型便无法储存如此大的结果。这篇文章将介绍如何用高精度计算算法解决这一问题。

高精度阶乘问题 题目描述

 参考题目连接:PTA | 程序设计类实验辅助教学平台 (pintia.cn)

题目要求很简单:输入一个整数,输出它的阶乘。

低精度算法及局限性

按比较直接的思路,用一个for循环即可解决,代码如下

void Print_Factorial ( const int N ){ int s = 1; for(int i=1;i len) ? k + j + 1 : len; } else len = k + j; } } return len; // for(int i=len; i>=0;i--) printf("%d",res[i]); } void Print_Factorial(const int N) { if (N == 0) printf("1"); else if (N < 0) printf("Invalid input"); else { int n1[MAXN] = {0}; int time = 0; int last_r = 0; int p = 0; for (int i = 10; time == 0; i *= 10) { if (N % i == N) time++; int r1 = N % i; int r2 = r1 - last_r; last_r = r1; n1[p++] = r2 / (i / 10); } int flag = 0; int n2[MAXN] = {0}; int len = p - 1; for (int i = 0; i < p; i++) { n2[i] = n1[i]; } for (int i = 0; i < N - 1; i++) { int res[MAXN] = {0}; n2[0] -= 1; for (int j = 0; j < p; j++) { if (n2[j] < 0) { n2[j] = 9; n2[j + 1] -= 1; } if (n2[p - 1] == 0) p--; } len = Print_MULT(n1, n2, len, p, res, len); for (int j = 0; j = 0; i--) printf("%d", n1[i]); } }



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有