#include <iostream>

#include <cstring>

using namespace std;

#define null 0

#define MAXN 51

//大数相乘

char *big_cheng(char line1[], char line2[])

{

short s1[MAXN], s2[MAXN], s[MAXN];//s1,s2:两个乘数;s:乘积的结果

int i, j, k, c;

int len1, len2, len;

len1 = strlen(line1);

len2 = strlen(line2);

len = len1 + len2;//初步确定乘积的长度

for(i = len1 - 1; i >= 0; i--)

{

s1[i] = line1[len1 - i -1] - '0';//将字符串转化为整型,并反着存放

}

for(i = len2 - 1; i >= 0; i--)

{

s2[i] = line2[len2 - i - 1] - '0';

}

memset(s, 0, sizeof(short) * (MAXN - 1));//s数组初始化

for(i = 0; i <= len1 -1; i++)

for(j = 0; j <= len2 -1; j++)

s[i + j] = s[i + j] + s1[i] * s2[j];//逐位相乘         //核心所在

for(i = 0, c = 0; i <= len - 1;i++)//处理进位

{

k = s[i] + c;

s[i] = k % 10;

c = k / 10;

}

for(i = len - 1; i >= 0; i--)

if(s[i] != 0)break;//处理多余的零

len = i + 1;

char *line;//注意只有指针才可以返回去,不能定义成数组

line = new char[len + 1];

if(len == 0)

{

line[0] = 0 + '0';

line[1] = '\0';//字符串的结束标志

}

else

{

for(i = 0; i <= len - 1; i++)

line[i] = s[len - i - 1] + '0';

line[len] = '\0';//字符串的结束标志

}

return line;

}

int main()

{

char line1[MAXN], line2[MAXN];

while(cin >> line1 >>line2)

{

cout << big_cheng(line1, line2) << endl;

}

return 0;

}

大数相乘算法C++版的更多相关文章

  1. leetcode 43 Multiply Strings 大数相乘

    感觉是大数相乘算法里面最能够描述.模拟演算过程的思路 class Solution { public String multiply(String num1, String num2) { if(nu ...

  2. java版大数相乘

    在搞ACM的时候遇到大数相乘的问题,在网上找了一下,看到了一个c++版本的 http://blog.csdn.net/jianzhibeihang/article/details/4948267 用j ...

  3. Karatsuba乘法--实现大数相乘

    Karatsuba乘法 Karatsuba乘法是一种快速乘法.此算法在1960年由Anatolii Alexeevitch Karatsuba 提出,并于1962年得以发表.此算法主要用于两个大数相乘 ...

  4. POJ 2389 Bull Math(水~Java -大数相乘)

    题目链接:http://poj.org/problem?id=2389 题目大意: 大数相乘. 解题思路: java BigInteger类解决 o.0 AC Code: import java.ma ...

  5. Linux C/C++ 编程练手 --- 大数相加和大数相乘

    最近写了一个大数相乘和相加的程序,结果看起来是对的.不过期间的效率可能不是最好的,有些地方也是临时为了解决问题而直接写出来的. 可以大概说一下相乘和相加的解决思路(当然,大数操作基本就是两个字符串的操 ...

  6. Strassen 矩阵相乘算法(转)

    偶尔在算法课本上面看到矩阵相乘的算法,联想到自己曾经在蓝桥杯系统上曾经做过一道矩阵相乘的题目,当时用的是普通的矩阵相乘的方法,效率极低,勉强通过编译.所以决定研究一下Strassen矩阵相乘算法,由于 ...

  7. Java 大数相乘、大数相加、大数相减

    思路来源:: https://blog.csdn.net/lichong_87/article/details/6860329 /** * @date 2018/6/22 * @description ...

  8. KMP算法-Python版

                               KMP算法-Python版 传统法: 从左到右一个个匹配,如果这个过程中有某个字符不匹配,就跳回去,将模式串向右移动一位.这有什么难的? 我们可以 ...

  9. 华为上机测试题(大数相乘-java)

    PS:这个不是自己写的,测试OK,供参考. /** * 大数相乘 */ public class BigData { public static void main(String[] args) { ...

随机推荐

  1. 怎么运用好ZBrush中Magnify膨胀笔刷

    Magnify膨胀笔刷是ZBrush笔刷中经常使用的,利用该笔刷可绘制中心向四周膨胀的效果.本文内容向大家介绍ZBrush®中膨胀笔刷以便大家熟悉它的用法和特性. 查看更多内容请直接前往:http:/ ...

  2. 项目回顾1-图片上传-form表单还是base64-前端图片压缩

    第一个项目终于上线了,是一个叫亲青筹的公益众筹平台,微信端,电脑端还有后台界面大部分都是我完成的,几个月过来,感觉收获了很多,觉得要总结一下. 首先想到的是图片上传的问题.在通常表单数据都是ajax上 ...

  3. Codeforces Round #266 (Div.2) B Wonder Room --枚举

    题意:给出一个两边长为a,b的矩形,要求增加a和增加b使a*b>=6*n且a*b最小. 解法:设新的a,b为a1,b1,且设a<b,那么a<=a1<=ceil(sqrt(6*n ...

  4. Masonry

    Autolayout就像一个知情达理,善解人意的好姑娘,可惜长相有点不堪入目,所以追求者寥寥无几.所幸遇到了化妆大师cloudkite,给她来了一个完美的化妆,从此丑小鸭Autolayout变成了美天 ...

  5. UWP 解压 GZIP

    准备工作: 通过 NUGET 安装 Microsoft.Bcl.Compression ; 使用命名空间 using System.IO.Compression ; public static asy ...

  6. Delphi7的HtmlParser使用方法

    uses HtmlParser procedure TForm4.Button1Click(Sender: TObject); var FNodes:IHtmlElement; aString:str ...

  7. php基础10:字符串中插入变量

    <?php //插入字符串 //1.双引号可以解析字符串中的变量:但是前后不能跟中文符号 $username = "gaoxiong"; echo "my name ...

  8. 【转】使用sklearn优雅地进行数据挖掘

    这里是原文 目录 使用sklearn进行数据挖掘 1.1 数据挖掘的步骤 1.2 数据初貌 1.3 关键技术并行处理 并行处理 2.1 整体并行处理 2.2 部分并行处理流水线处理自动化调参持久化回顾 ...

  9. HTTP协议简介1

    概念 HTTP协议:超文本传输协议,用于服务端传输超文本到客户端的传输协议.是一个应用层协议. 工作流程 一次http请求就是一个事务.过程可分为四步: 1.客户端与服务器建立链接.页面上单击某个链接 ...

  10. 关于那些难改的bug

    多年的测试经验中,经常发现有这么一种现象:总有些提了的bug不能顺利的被修复.这些bug往往有4个走向: 1.在被发现的版本中最终被解决,但中途花费较多周折. 2.有计划的在后续的版本中被解决. 3. ...