zoukankan      html  css  js  c++  java
  • 高精度算法求n阶阶乘

     1 #include "stdio.h"
     2 #include "String.h"
     3 #define MAX 10000
     4 int f[MAX];
     5 void Arr_reset(int a[],int m,int n)
     6 {
     7     int i;
     8     for(i=m;i<=m;i++)
     9     {
    10         a[i]=0;
    11     } 
    12 }
    13 int main(void)
    14 {
    15     int i,j,n;
    16     printf("Enter n:");
    17     scanf("%d",&n);
    18     Arr_reset(f,0,(sizeof(f)/sizeof(int)));//对数组进行初始化
    19     f[0]=1;
    20     for(i=2;i<=n;i++)
    21     {
    22         //乘以 i
    23         int c=0;
    24         for(j=0;j<MAX;j++)//最不易理解的
    25         {
    26             int s=f[j]*i+c;
    27             f[j]=s%10;
    28             c=s/10;
    29             //算出的 s 是单位数时,会连续覆盖 f[0]
    30             //否则一个多位数会倒过来存储,如 123,f[0]存 3,f[1]存 2,f[3]存 1
    31             //因此上式先求余,在求模
    32         } 
    33     }
    34     for(j=MAX-1;j>=0;j--)
    35         if(f[j])
    36             break;//忽略前导 0
    37     for(i=j;i>=0;i--)
    38         printf("%d",f[i]);
    39     printf("
    ");
    40     return 0;
    41 }
    #include<iostream>
    using namespace std;
    int main()
    {
          int a[10000];
          int n;
          cout<<"请输入n 计算n的阶乘"<<endl; 
          while(cin>>n&&n>=0)
          {
                  a[0]=1;
                  int temp=0;
                  int digit=1;
                  
                  for(int i=2;i<=n;i++)//该for循环对于大于2的阶乘才奏效。 
                  {
                          int num=0;
                          for(int j=0;j<digit;j++)
                          {
                                  temp=a[j]*i+num;
                                  a[j]=temp%10; 
                                  num=temp/10;
                          }
                          while(num)
                          {
                                  a[digit]=num%10;//越前存储比如f[0]存4不动,f[1]存2。
                                  num/=10;
                                  digit++;
                          }
                  }
                  for(int i=digit-1;i>=0;i--)//反转输出,先输出f[1]为2,再输出f[0]为4。 
                  {
                          cout<<a[i];
                  }
                  cout<<endl;
          }
          return 0;
    }

    不懂 没注释 存疑 

  • 相关阅读:
    PHP文件系统处理(二)
    PHP中的文件系统处理(一)
    PHP中常用正则表达式大全
    PHP中的正则表达式的使用
    SLF4J日志框架
    内部类
    计算机存储单位
    Maven 要点
    Maven 父类工程创建及引用
    Eclipse Maven Web项目创建
  • 原文地址:https://www.cnblogs.com/ranzhong/p/13735026.html
Copyright © 2011-2022 走看看