C语言计算大数阶乘的方法

本文实例为大家分享了C语言计算大数阶乘的具体代码,供大家参考,具体内容如下

问题描述

输入一个正整数n,输出n!的值。
其中n!=1*2*3*…*n。

算法描述

n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。
将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。

输入格式

输入包含一个正整数n,n<=1000。

输出格式

输出n!的准确值。

样例输入

10

样例输出

3628800

#include <stdio.h>
#define N 10000
int main()
{
 int a[N]={1};
 int k=0,l=1,n;
 int i,j;
 scanf("%d",&n);
 for(i=1;i<=n;i++)
 {
  for(j=0;j<l;j++)
  {
   a[j]=a[j]*i+k;
   k=a[j]/10000;
   a[j]=a[j]%10000;
  }
  if(k)
  {
   a[j]=k;
   l++;
   k=0;
  }
 }
 printf("%d",a[l-1]);
 for(i=l-2;i>=0;i--)
  printf("%04d",a[i]);
 printf("\n");
 return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • c语言求阶乘精确值示例

    复制代码 代码如下: #include <stdio.h>#include <string.h>const int maxn = 3000;int f[maxn];int main(){ int i,j,n; scanf("%d",&n); memset(f,0,sizeof(f)); f[0] = 1; for(i = 2;i <= n;i++) {  int c = 0;  for(j = 0;j < maxn;j++)  {   int

  • c语言阶乘之和问题示例详解

    题目描述 用高精度计算出S=1!+2!+3!+-+n!(n≤50) 其中"!"表示阶乘,例如:5!=5*4*3*2*1. 输入输出格式 输入格式: 一个正整数N. 输出格式: 一个正整数S,表示计算结果. 输入输出样例 输入样例 3 输出样例 9 #include<stdio.h> int fun(int n) { if(n==1||n==0) { return 1; } if(n>1) { return fun(n-1)*n; } } int main() { in

  • C语言练习题:求1到10的阶乘之和简单实例

    C语言练习题:求1到10的阶乘之和简单实例 #include <stdio.h> int factorial(int n) { if(0==n) return 1; if(1==n) return 1; return n*factorial(n-1); } int main() { int n=10; int sum=0; int i; for(i=1;i<=n;i++){ int m=factorial(i); printf("%d->%d\n",i,m);

  • C语言 实现N阶乘的程序代码

    代码如下所示: 复制代码 代码如下: #include <stdio.h>#include <stdlib.h>#define N 10 //算N的阶乘int main(){       //数组   1位 1!    int ary[N] = {1, 1};    int i, j;    for (i = 2; i <= N; i++)    {        //各个下标的阶乘,第0位下标是位数,所以从第1位开始        for (j = 1; j <= a

  • C语言实现的阶乘,排列和组合实例

    本文实例讲述了C语言实现的阶乘,排列和组合.分享给大家供大家参考.具体如下: #include<stdio.h> int Factorial(int n) { int i=0; int sum=1; int array[]={0}; for(i=n;i>=1;i--) { sum=sum*i; } return sum; } int Arrangement(int n,int m) { int result=0; if(m>n) { printf("您的输入有错,上边的数

  • C语言测试n的阶乘和x的n次方

    题目描述 输入一个正数x和一个正整数n,求下列算式的值.要求定义两个调用函数:fact(n)计算n的阶乘:mypow(x,n)计算x的n次幂(即xn),两个函数的返回值类型是double. ×输出保留4位小数. 输入 x n 输出 数列和 样例输入 2.0 3 样例输出 1.3333 答案 /************************************************************************* > File Name: 2.c > Author: &

  • 使用C语言求N的阶乘的方法

    用递归法求N的阶乘 程序调用自身称为递归( recursion).它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解. 递归的能力在于用有限的语句来定义对象的无限集合. 一般来说,递归需要有边界条件.递归前进段和递归返回段.当边界条件不满足时,递归前进:当边界条件满足时,递归返回. #include <stdio.h> #include <string.h> #include <stdlib.h> long factorial(int n) {

  • C语言计算大数阶乘的方法

    本文实例为大家分享了C语言计算大数阶乘的具体代码,供大家参考,具体内容如下 问题描述 输入一个正整数n,输出n!的值. 其中n!=1*2*3*-*n. 算法描述 n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法.使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推. 将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位. 输入格式 输入包含一个正整数n,n<=1000. 输出格式 输出n!的准确值. 样例输入 10 样例输

  • C语言计算大数相加的方法

    本文实例为大家分享了C语言计算大数相加的具体代码,供大家参考,具体内容如下 问题描述 输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储.对于这种问题,一般使用数组来处理. 定义一个数组A,A[0]用于存储a的个位,A[1]用于存储a的十位,依此类推.同样可以用一个数组B来存储b. 计算c = a + b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C[

  • C语言计算日期差的方法示例

    本文实例讲述了C语言计算日期差的方法.分享给大家供大家参考,具体如下: 历史上,不同的人类聚居地可能有不同的历法,因而记录下来的资料中日期的换算就很麻烦.幸好今天我们统一使用公元纪年法.当然,这种历法对求两个日期差多少天也不是十分简便,但毕竟是可以忍受的. 下面的程序计算了两个日期的差值,两个日期都使用公元纪年法. #include <bits/stdc++.h> using namespace std; int to_day(int y, int m, int d) { int mon[]

  • Go语言计算指定年月天数的方法

    本文实例讲述了Go语言计算指定年月天数的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import (     "fmt"     "bufio"     "os"     "regexp"     "strconv" ) func main() {     year := input("year", "^[0-9]{1}[0-

  • go语言计算两个时间的时间差方法

    本文实例讲述了go语言计算两个时间的时间差方法.分享给大家供大家参考.具体分析如下: go语言计算两个时间的时间差,代码很简单,返回1天前.1周前还是1月前的时间 package main import ( "fmt" "time" ) func main() { //Add方法和Sub方法是相反的,获取t0和t1的时间距离d是使用Sub //将t0加d获取t1就是使用Add方法 k := time.Now() //一天之前 d, _ := time.ParseDu

  • Go语言计算两个经度和纬度之间距离的方法

    本文实例讲述了Go语言计算两个经度和纬度之间距离的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main        import (     "fmt"     "math" )        func main() {     lat1 := 29.490295     lng1 := 106.486654            lat2 := 29.615467     lng2 := 106.581515     f

  • C语言简单实现计算字符个数的方法

    本文实例讲述了C语言简单实现计算字符个数的方法.分享给大家供大家参考.具体如下: char_counting.c如下: #include<stdio.h> int main() { long nc; nc = 0; while(getchar() != '0') { ++nc; } printf("%ld\n", nc); } 编译和使用下: 复制代码 代码如下: gcc char_counting.c -o char_counting.o 一种通常的调用方式: 复制代码

  • Java两种方法计算出阶乘尾部连续0的个数

    第一个方法是计算出阶乘然后计算字符串的0的个数. import java.util.Scanner; import java.math.BigDecimal; import java.text.DecimalFormat; public class jc{ public static void main(String args[]){ Scanner reader = new Scanner(System.in); DecimalFormat a = new DecimalFormat("#&q

  • Java介绍多线程计算阶乘实现方法

    代码运行结果如下: 输入n的值之后,就可以点击开始计算,计算过程中可以暂停计算,也可以停止计算 这是几种线程的操作: 1.sleep方法,线程按时间睡眠,到时间恢复. 2.suspend/resume,暂停/继续方法.Java多线程废弃方法.资源独占,容易发生死锁,脏数据. 3.stop,停止方法,Java多线程废弃方法,线程不安全. 4.wait方法,使得当前线程立刻停止运行,处于等待状态(WAIT),并将当前线程置入锁对象的等待队列中,直到被通知(notify)或被中断为止. 5.notif

  • PHP基于简单递归函数求一个数阶乘的方法示例

    本文实例讲述了PHP基于简单递归函数求一个数阶乘的方法.分享给大家供大家参考,具体如下: 一.问题: 求一个数a的阶乘,那么,a!=a*(a-1)*(a-2)*(a-3)*--*2*1.比如,6的阶乘6!=6*5*4*3*2*1=720.那么,如何通过php代码实现求任意一个数的阶乘? 二.实现代码: <?php function demo($a) { if ($a > 1) { $r = $a * demo($a - 1); } else { $r = $a; } return $r; }

随机推荐