• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++实现大数乘法算法代码

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++大数运算,c++大数加法,大数乘法算法,大数乘法,c语言大数乘法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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;
}
</div>

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

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++快速幂与大数取模算法示例
  • C++实现大数乘法算法代码
  • C++大数模板(推荐)
  • 深入分析C++中两个大数相乘结果不正确的问题
  • c++大数阶乘的实现方法

相关文章

  • 2017-05-28浅析成员函数和常成员函数的调用
  • 2017-05-28C语言中查找字符在字符串中出现的位置的方法
  • 2017-05-28C++编程异常处理中try和throw以及catch语句的用法
  • 2017-05-28浅析c++中new和delete的用法
  • 2017-05-28深入理解链表的各类操作详解
  • 2017-05-28C++中静态存储区与栈以及堆的区别详解
  • 2017-05-28C语言程序中递归算法的使用实例教程
  • 2017-05-28C字符串与C++字符串的深入理解
  • 2017-05-28深入探讨Linux静态库与动态库的详解(一看就懂)
  • 2017-08-17文件的合并与拆分

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++调用迅雷接口解析XML下载功能(迅雷下载功能)
    • C++去除输入行中空白的方法
    • C++中用指向数组的指针作函数参数
    • C C++ 算法实例大全
    • C++ new/delete相关知识点详细解析
    • 深入理解c语言数组
    • 二叉树前序遍历的非递归算法
    • 详细分析Android中实现Zygote的源码
    • 深入C语言内存区域分配(进程的各个段)详解
    • VC程序设计小技巧20例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有