大整数的乘法运算

   计算机存储数据是按照类型分配空间的,一般整形为两个字节范围在-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位



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

原文地址:https://www.cnblogs.com/gaot/p/4833816.html