C++实现大整数乘法(字符串乘法)
作者:qiuchenl 发布时间:2021-10-23 16:37:22
标签:C++,大整数乘法
本文实例为大家分享了C++实现大整数乘法的具体代码,供大家参考,具体内容如下
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
string add(string a,string b)
{
if(a.length()==0)
return b;
if(b.length()==0)
return a;
a.length()<b.length()?a.swap(b):a.length();
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
int flag=0;
for(int i=0;i<a.length();i++)
{
int aInt=a[i]-'0';
int bInt=0;
if(i<b.length())
bInt=b[i]-'0';
int result=aInt+bInt+flag;
a[i]=result%10+'0';
flag=result/10;
}
if(flag!=0)
{
a=a+(char)(flag+'0');
}
reverse(a.begin(),a.end());
return a;
}
string multiply(std::string strMultiplierA,char x)
{
int b=x-'0';
int flag=0;
for(int i=strMultiplierA.length()-1;i>=0;i--)
{
int a=strMultiplierA[i]-'0';
int result=a*b+flag;
strMultiplierA[i]=result%10+'0';
flag=result/10;
}
if(flag!=0)
strMultiplierA=(char)(flag+'0')+strMultiplierA;
while(strMultiplierA.length()>1&&strMultiplierA[0]=='0')
strMultiplierA=strMultiplierA.substr(1,strMultiplierA.length());
return strMultiplierA;
}
/*****************************************************************************
Prototype : multiply
Description : 两个任意长度的长整数相乘, 输出结果
Input Param :
const std::string strMultiplierA 乘数A
const std::string strMultiplierB 乘数B
Output :
std::string strRst 乘法结果
Return Value :
int 0 正确
-1 异常
*****************************************************************************/
int multiply (const std::string strMultiplierA,const std::string strMultiplierB, std::string &strRst)
{
/* 在这里实现功能 */
if(strMultiplierA.length()<=0||strMultiplierB.length()<=0)
return -1;
bool flag=false;//false"+" true"-"
string strA=strMultiplierA,strB=strMultiplierB;
if(strMultiplierA[0]=='-')
{
flag=~flag;
strA=strMultiplierA.substr(1,strMultiplierA.length());
}
if(strMultiplierB[0]=='-')
{
flag==true?flag=false:flag=true;
strB=strMultiplierB.substr(1,strMultiplierB.length());
}
for(int i=strB.length()-1;i>=0;i--)
{
string result=multiply(strA,strB[i]);
int j=i;
while(++j<strB.length())
result=result+"0";
// while(result.length()>1&&result[0]=='0')
// result=result.substr(1,result.length());
strRst=add(strRst,result);
}
while(strRst.length()>1&&strRst[0]=='0')
strRst=strRst.substr(1,strRst.length());
if(flag==true&&strRst!="0")
strRst='-'+strRst;
return 0;
}
int main()
{
std::string strResult = "";
multiply("-5489324", "0", strResult);
cout<<strResult<<endl;
}
来源:https://blog.csdn.net/qiuchenl/article/details/17752073


猜你喜欢
- 本文实例为大家分享了自定义Drawable实现圆形和圆角的具体代码,供大家参考,具体内容如下圆形package com.customview
- 配置绑定所谓配置绑定”就是把配置文件中的值与 JavaBean 中对应的属性进行绑定。通常,我们会把一些配置信息(例如,
- java 定时任务在我们编程过程中如果需要执行一些简单的定时任务,无须做复杂的控制,我们可以考虑使用JDK中的Timer定时任务来实现。下面
- 关于unicode和utf的关系,可以简单的记忆:Unicode是一个编码组织、一个编码规范、在java中指utf-16;utf是Unico
- 本文以实例形式展示了C#判等对象是否相等的常用方法,非常实用,可供大家参考借鉴之用。具体分析如下:一、判断相等的3个方法1.实例方法publ
- 本文实例讲述了Java抽象类和抽象方法定义与用法。分享给大家供大家参考,具体如下:一、Java抽象类参考资料:Java抽象类 详解1、抽象类
- 本文实例讲述了C#实现导出List数据到xml文件的方法。分享给大家供大家参考,具体如下:C#导出List数据到xml文件,这里主要用到的是
- 需求假设要设计一个名为estimate()的函数,估算编写指定行数的代码所需的时间,并且希望不同的程序员都可以使用该函数。对于所有的用户来说
- 简介:本文已一个简要的代码示例介绍ThreadLocal类的基本使用方式,在此基础上结合图片阐述它的内部工作原理。早在JDK1.2的版本中就
- 本文以实例代码实现了C#根据数字序号输出星期几,用户可通过输入数字0~6,输出星期各天的英语单词,程序中主要是演示if语句和switch语句
- 前言:Android的服务是开发Android应用程序的重要组成部分。不同于活动Activity,服务是在后台运行,服务没有接口,生命周期也
- java并发之ArrayBlockingQueue详细介绍 ArrayBlockingQueue是常用的线程集合,在线程池中也常常
- Java中的我们可以利用split把字符串按照指定的分割符进行分割,然后返回字符串数组split 方法该方法的作用是:将一个字符串分割为子字
- 介绍建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种
- 一、封装类1.封装类概念Java中存在基础数据类型,但是在某些情况下,我们要对基础数据类型进行对象的操作,例如,集合中只能存对象,而不能存在
- 1. Spring Boot 入门 Spring Boot是Spring社区较新的一个项目。该项目的目的是帮助开发者更容易的创建基于Spri
- 前言提起子类、基类和方法继承这些概念,肯定大家都非常熟悉。毕竟,作为一门支持OOP的语言,掌握子类、基类是学习C#的基础。不过,这些概念虽然
- 在javaweb中写了一个图片的链接,可以打开预览,另外提供一个下载功能。以下是预览代码,没什么好说的;href若连接的是一个压缩包文件之类
- 本文实例讲述了android编程之ip2id程序。分享给大家供大家参考。具体分析如下:一、说明:公司一个项目中需要给一系列网络设备分配id号
- 一、简介地图控件自v2.3.5版本起,支持多实例,即开发者可以在一个页面中建立多个地图对象,并且针对这些对象分别操作且不会产生相互干扰。文件