• 大整数的乘法运算


       计算机存储数据是按照类型分配空间的,一般整形为两个字节范围在-32768~32767之间,长整形为4个字节32位,其范围在-2147483648~2147483647.现在我们利用数组来计算高精度数据(值超过长整形的范围): 

        例如:高精度数据*长整数

    算法如下:

    #include <iostream>
    #include<string.h>
    using namespace std;
    
    int main()
    {
        long b,c,d;
        int a[256],n;
        char str[256];
        printf("Input a great number:");
        scanf("%s",str);
        printf("input a long integer number:");
        scanf("%ld",&c);
        d=0;
        n=strlen(str);
        //计算前面n位数的值
        for(int i=0,j=n-1;i<n;i++,j--)
        {
            b=(str[j]-48)*c+d;
            a[i]=b%10;
            d=b/10;
        }
        //保存后面高位数据
        while(d)
        {
            a[n]=d%10;
            d=d/10;
            n++;
        }
    
        for(int i=n-1;i>=0;i--)
            printf("%d",a[i]);
    
        return 0;
    }
    

    编程求 n<=100时,n!的准确值。

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        long a[256], b, c, d;
        int m = 1, i, j,n,r;
        scanf("%d", &n);
        d = 0;
        a[1] = 1;
    
        for(i = 2; i <= n; i++)
        {
            for(j = 1; j <= m; j++)
            {
                c = a[j] * i + d;
                a[j] = c % 1000000;
                d = c / 1000000;
            }
            if(d)
            {
                a[j]=d;
                ++m;
            }
        }
        printf("%d!=",n);
        for(i=m;i>=1;i--)
        {
            if(a[i]==0)
                continue;
            else
            {
                r=i;
                break;
            }
        }
            printf("%ld",a[r]);
            for(i=r-1;i>=1;i--)
            {
                if(a[i]>99999)
                    printf("%ld",a[i]);
                else if(a[i]>9999)
                    printf("0%ld",a[i]);
                else if(a[i]>999)
                    printf("00%ld",a[i]);
                else if(a[i]>99)
                    printf("000%ld",a[i]);
                else if(a[i]>9)
                    printf("00000%ld",a[i]);
                else
                    printf("00000ld",a[i]);
            }
        return 0;
    }
    

    为节省空间,采用的是长整形数组,每个数组元素存6位



    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    docker快速部署DNS,实现快速上线
    图解CentOS系统启动流程
    MySQL/MariaDB读写分离配置
    分享使用PHP开发留言板
    LNMP+Redis架构部署
    Mysql/Mariadb主从复制
    记一次Ubuntu19无法安装docker源
    Tomcat部署项目的三个方法
    Ubuntu部署Tomcat Web服务
    Linux简单检查服务运行脚本
  • 原文地址:https://www.cnblogs.com/gaot/p/4833816.html
Copyright © 2020-2023  润新知