zoukankan      html  css  js  c++  java
  • 精度计算——大数阶乘

    小练习,大数阶乘代码

    思想:

      运算结果放在long long类型的数组a中(如果放在字符串中还要进行字符串和数字的转换,容易出错),数组中每个数据都是一个四位数。

      阶乘顺序1*2*3*……*n(用i表示其中的一个数),每次的运算结果都存储在a中,每次运算的时候,把a中的每个数依次与i相乘。

    代码:

    #include <stdio.h>
    #include <math.h>
    
    int factorial(int n)
    {
        long long a[10000];//存储运算结果,运算过程中抱保证每个a是个四位数
        a[0] = 1;
        int m = 0, w, c; //w存储运算结果的位数,m记录存储运算结果的数组的下标,c保存运算结果中大于四位的部分,用于进位。
        for(int i = 1; i <= n; i++) //参加阶乘的数字,1*2*3*……*n
        {
            c = 0;
            for(int j = 0; j <= m; j++) //上一步运算结果数组中的每一个数
            {
                a[j] = a[j] * i + c;
                c = a[j] / 10000;
                a[j] = a[j] % 10000;
            }
            if(c > 0) {m++; a[m] = c;}
        }
    
        w = m*4 + log10(a[m]) + 1; //结果的位数
    
        for(int i = m; i >= 0; i--)//输出运算结果
            printf("%d", a[i]);
        return w;
    }
    int main()
    {
        factorial(10);
        return 0;
    }
  • 相关阅读:
    SGU 499 Greatest Greatest Common Divisor
    pku 3468 A Simple Problem with Integers
    pku2226 Muddy Fields
    pku3041 Asteroids
    java基础string操作
    PowerDesigner(7)转载
    java基础2
    PowerDesigner(6)转载
    java基础3
    java基础(1)
  • 原文地址:https://www.cnblogs.com/rain-1/p/6575070.html
Copyright © 2011-2022 走看看