zoukankan      html  css  js  c++  java
  • c语言中阶乘的精确值

      对于大数的操作,可能超出int,甚至long的表示范围,对此,可以使用数组来存储大数,下列代码为求1000以内数的阶乘的代码,代码如下:

    #include <stdio.h>
    #include<string.h>
    const int max=3000;
    int main()
    {
        int f[3000];//存放最终的结果
        int i,j,n,c,tem;
        memset(f,0,sizeof(f));
        scanf("%d",&n);
        f[0]=1;
        for(i=2;i<=n;i++)
        {
            c=0;
            for(j=0;j<max;j++)
            {
                tem=i*f[j]+c;
                c=tem/10;
                f[j]=tem%10;
    
            }
        }
        for(j=max-1;j>=0;j--)
            if(f[j]!=0)
                break;
            for(i=j;i>=0;i--)
                printf("%d",f[i]);    
            printf("
    ");
        return 0;
    }

    对于这段代码的理解,可以利用最简单的例子来阐明。

    例如,利用int 数组来存储结果,数组长度为4,数组名为a.

    在45*33的运算中,利用小学的笔算方法如下:

                                    

      在计算机语言中,我们是这样计算的,首先a[0]=5,a[1]=4,a[3]=0,a[4]=0;

    33*a[0]=135,此刻将a[0]赋值为5,进位为c=13

    第二步

    33*a[1]+c=148,此刻将a[1]赋值为8,进位为c=14

    第三步

    33*a[2]+c=14,此刻将a[2]赋值为4,进位为c=1

    第四步

    33*a[3]+c=1,此刻将a[3]赋值为1,运算成功!

                                

  • 相关阅读:
    java中将表单转换为PDF
    base64图片
    ORACLE中用户等系统信息操作
    jquery中live is not a function的问题
    完全卸载Oracle11G
    jquery 获取鼠标和元素的坐标点
    JS的多线程
    Oracle和SQLServer解锁杀进程
    JAVA 通过LDAP获取AD域用户及组织信息
    oracle基础语法大全
  • 原文地址:https://www.cnblogs.com/liujunming/p/4676250.html
Copyright © 2011-2022 走看看