当前位置: 首页 > 编程笔记 >

C++实现大数乘法算法代码

邢冷勋
2023-03-14
本文向大家介绍C++实现大数乘法算法代码,包括了C++实现大数乘法算法代码的使用技巧和注意事项,需要的朋友参考一下

C++实现大数乘法算法代码


//大数乘法算法

#include<iostream>

#include<string>

#include<cstring>

using namespace std;

int main()

{

    string num1,num2;

    cin >> num1 >> num2;

    //cout << num1.size() << " " << num2.size() << endl;

    const char* n1;

    const char* n2;

    if (num1.size() < num2.size())

    {

        n1 = num2.c_str();

        n2 = num1.c_str();

    }

    else

    {

        n1 = num1.c_str();

        n2 = num2.c_str();

    }

    char* n = new char[strlen(n1)+strlen(n2)+1];

    for (unsigned int i = 0; i < strlen(n1)+strlen(n2); i++)

        n[i] = '0';

    n[strlen(n1)+strlen(n2)]='\0';

    //cout << strlen(n) << endl;

    int count = 0,flag = 0;

    for (int i = strlen(n1)-1; i >= 0; i--)

    {

        flag++;

        int x1 = n1[i]-'0';

        //cout << "n1["<< i << "]为:" << x1 << endl;

        char carry = '0';

        for (int j = strlen(n2)-1; j >= 0; j--)

        {

            int x2 = n2[j]-'0';

            //cout << "n2["<< j << "]为:" << x2 << endl;

            //cout << "当前位未改变前值为: " << n[count] << endl;

            int sum = x1*x2 + (carry-'0') + n[count]-'0';

            //cout << "sum is " << sum << endl;

            n[count++] = (sum % 10)+'0';

            carry = (sum / 10)+'0';

            //cout << "当前位的值为: " << n[count-1] << endl;

            //cout << "carry的值为:" << carry << endl;

        }

        if (carry != '0')

        {

            n[count] = carry;

            count = flag;

            //cout << "当前位的值为: " << n[count] << endl;

        }

        else

            count = flag;

    }

    for (int i = strlen(n)-1; i >= 0; i--)

    {

        if ((i == strlen(n)-1)&&(n[i] == '0'))

            continue;

        cout << n[i];

    }

    cout << endl;

    delete[]n;

    system("pause");

    return 0;

}

以上就是本文所述的全部内容了,希望大家能够喜欢。

 类似资料:
  • 本文向大家介绍C语言实现九大排序算法的实例代码,包括了C语言实现九大排序算法的实例代码的使用技巧和注意事项,需要的朋友参考一下 直接插入排序 将数组分为两个部分,一个是有序部分,一个是无序部分。从无序部分中依次取出元素插入到有序部分中。过程就是遍历有序部分,实现起来比较简单。 折半插入排序 折半插入再直接插入上有改进,用折半搜索替换遍历数组,在数组长度大时能够提升查找性能。其本质还是从无序部分取出

  • 本文向大家介绍C/C++实现八大排序算法汇总,包括了C/C++实现八大排序算法汇总的使用技巧和注意事项,需要的朋友参考一下 概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序。

  • 本文向大家介绍Ruby实现的矩阵连乘算法,包括了Ruby实现的矩阵连乘算法的使用技巧和注意事项,需要的朋友参考一下 动态规划解决矩阵连乘问题,随机产生矩阵序列,输出形如((A1(A2A3))(A4A5))的结果。 代码:

  • 本文向大家介绍Java版超大整数阶乘算法代码详解-10,0000级,包括了Java版超大整数阶乘算法代码详解-10,0000级的使用技巧和注意事项,需要的朋友参考一下 当计算超过20以上的阶乘时,阶乘的结果值往往会很大。一个很小的数字的阶乘结果就可能超过目前个人计算机的整数范围。如果需求很大的阶乘,比如1000以上完全无法用简单的递归方式去解决。在网上我看到很多用C、C++和C#写的一些关于大整数

  • 本文向大家介绍C++ 搬水果贪心算法实现代码,包括了C++ 搬水果贪心算法实现代码的使用技巧和注意事项,需要的朋友参考一下 C++ 搬水果贪心算法实现代码 (1)题目描述:     在一个果园里,小明已经将所有的水果打了下来,并按水果的不同种类分成了若干堆,小明决定把所有的水果合成一堆。每一次合并,小明可以把两堆水果合并到一起,消耗的体力等于两堆水果的重量之和。当然经过 n‐1 次合并之后,就变成

  • 本文向大家介绍C语言中K-means算法实现代码,包括了C语言中K-means算法实现代码的使用技巧和注意事项,需要的朋友参考一下 K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。 算法过程如下: 1)从N个样本随机选取K个样本作为质心 2)对剩余的每