C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C++ 高精度乘法运算

C++ 高精度乘法运算的实现

作者:CairBin

本文主要介绍了C++ 高精度乘法运算的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

思想

首先确定乘积的位数。

假设两个非负整数a和b,n1为a的长度(位数),n2为b的位数,记n为c=a*b的位数,则有:

计算两个乘数每位数字的乘积,其中a[i]乘b[j]累加到c[i+j]上去

在最后对累加结果数组c作一次性进位(判断是否大于等于10)

代码

知道上述原理,很容易就写出代码

#include <iostream>
#include <string>
#include <algorithm>
#include <string.h>

using namespace std;
int main()
{
    //输入时处理,包含置0、逆置、转换成真实数字等步骤
    string s;
    cin >> s;
    int n1 = s.length();    //长度
    char str1[10];
    memset(str1, 0, sizeof(str1));
    for (int i = 0; i < n1;i++)
        str1[i] = s[n1 - i - 1]-'0';
    
    string s2;
    cin >> s2;
    int n2 = s2.length();
    char str2[10];
    memset(str2, 0, sizeof(str2));
    for (int i = 0; i < n2;i++)
        str2[i] = s2[n2 - i - 1]-'0';


    char res[20];
    memset(res, 0, sizeof(res));

    //核心代码
    int i, j;
    for (i = 0; i < n1;i++)
        for (j = 0; j < n2;j++)
            res[i + j] += str1[i] * str2[j];

    for (i = 0; i < n1 + n2;i++)
    {
        if(res[i]>=10)
        {
            res[i + 1] += res[i] / 10;
            res[i] %= 10;
        }

    }

    //从不为0的那一位开始输出(删除前导0),如果全部为0,则输出0
    int k;
    for (k = n1 + n2 - 1; !res[k]&&k>0; k--)
        ;   //注意这个分号

    for (int i = k; i >= 0; i--)
        cout << int(res[i]);
    cout << endl;


    return 0;
}

到此这篇关于C++ 高精度乘法运算的实现的文章就介绍到这了,更多相关C++ 高精度乘法运算内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文