精度计算-乘法(大数乘大数)

简介:

语法:mult(char a[],char b[],char s[]);

参数:

a[] 被乘数,用字符串表示,位数不限

b[] 乘数,用字符串表示,位数不限

t[] 结果,用字符串表示

返回值: null

注意:  

  空间复杂度为 o(n^2)

  需要 string.h

源程序:  

 

复制代码
#include <iostream>
#include <string.h>
using namespace std;
void mult(char a[],char b[],char s[])
{
    int i,j,k=0,alen,blen,sum=0,res[65][65]={0},flag=0;
    char result[65];
    alen=strlen(a);
    blen=strlen(b); 
    for(i=0 ; i<alen ; i++)
        for(j=0 ; j<blen ; j++) 
            res[i][j]=(a[i]-'0')*(b[j]-'0');
    for(i=alen-1 ; i>=0 ; i--)
        {
            for (j=blen-1 ; j>=0 ; j--) 
                sum=sum+res[i+blen-j-1][j];
            result[k]=sum%10;
            k=k+1;
            sum=sum/10;
        }
    for(i=blen-2;i>=0;i--)
        {
            for(j=0;j<=i;j++) 
                sum=sum+res[i-j][j];
            result[k]=sum%10;
            k=k+1;
            sum=sum/10;
        }
    if(sum!=0) 
    {
        result[k]=sum;
        k=k+1;
    }
    for(i=0;i<k;i++) 
        result[i]+='0';
    for(i=k-1;i>=0;i--) 
        s[i]=result[k-1-i];
    s[k]='\0';
    while(1)
        {
        if(strlen(s)!=strlen(a) && s[0]=='0') 
            strcpy(s,s+1);
        else
            break;
        }
}
int main()
{
    char a[100];
    char b[100];
    char c[100];
    cout<<"请输入两个大数"<<endl;
    cin>>a>>b;
    mult(a,b,c);
    cout<<"计算结果是:"<<endl;
    cout<<c<<endl;
    return 0;
}
复制代码
本文转自博客园xingoo的博客,原文链接:精度计算-乘法(大数乘大数),如需转载请自行联系原博主。
相关文章
|
5月前
|
机器学习/深度学习 算法 Serverless
利用无穷级数逼近计算幂运算与开根号——Python实现
使用泰勒级数逼近法,本文介绍了如何用Python计算特殊幂运算,包括分数次幂和开根号。通过定义辅助函数,如`exp`、`getN_minus_n`、`multi`和`getnum`,实现了计算任意实数次幂的功能。实验结果显示,算法能有效计算不同情况下的幂运算,例如`0.09^2`、`1^2`、`0.25^2`、`0.09^(0.5)`、`1^(0.5)`和`0.25^(0.5)`。虽然精度可能有限,但可通过调整迭代次数平衡精度与计算速度。
|
存储
A除于B(大数相除)
A除于B(大数相除)
65 0
|
C++
C++ 超大整数相加、相乘的精确求解,以及10000的阶乘
C++ 超大整数相加、相乘的精确求解,以及10000的阶乘
115 0
|
算法
多项式运算专题
多项式运算专题
149 0
多项式运算专题
7-41 大数的乘法 (10 分)
7-41 大数的乘法 (10 分)
77 0
|
存储 算法
高精度加法,模拟大数的加法运算
在处理特别大的数相加特别大的数的时候,long long不能直接通过加法算出结果的时候,可以通过高精度算法处理这些数的相加具体·思路如下; 首先 1 . 这些数存到数组的时候该如何排列,是个位放在第一位还是最后一位放到第一位,由于数的相加的候常常出现进位,常在最后一位加上一个数,而加上数的话往往在数组最后一位加上数比较方便,所以我们把第个位放在数组第一位 2.其次在调用模拟大数相加的函数中,我们该如何处理同一位上数相加出现的进位呢,我们可以设置一个 t 存储数组上某位相加最后吧 t%10 ,就可以得到想要的数,同时在 t / 10 如果 t 会的得到 1 或者 0.
133 0
算法零基础——大数四则运算
算法零基础——大数四则运算
算法零基础——大数四则运算
《算法零基础100讲》(第1讲) 幂和对数
《算法零基础100讲》(第1讲) 幂和对数
《算法零基础100讲》(第1讲) 幂和对数