大数相乘算法C++版
#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++版的更多相关文章
- leetcode 43 Multiply Strings 大数相乘
感觉是大数相乘算法里面最能够描述.模拟演算过程的思路 class Solution { public String multiply(String num1, String num2) { if(nu ...
- java版大数相乘
在搞ACM的时候遇到大数相乘的问题,在网上找了一下,看到了一个c++版本的 http://blog.csdn.net/jianzhibeihang/article/details/4948267 用j ...
- Karatsuba乘法--实现大数相乘
Karatsuba乘法 Karatsuba乘法是一种快速乘法.此算法在1960年由Anatolii Alexeevitch Karatsuba 提出,并于1962年得以发表.此算法主要用于两个大数相乘 ...
- POJ 2389 Bull Math(水~Java -大数相乘)
题目链接:http://poj.org/problem?id=2389 题目大意: 大数相乘. 解题思路: java BigInteger类解决 o.0 AC Code: import java.ma ...
- Linux C/C++ 编程练手 --- 大数相加和大数相乘
最近写了一个大数相乘和相加的程序,结果看起来是对的.不过期间的效率可能不是最好的,有些地方也是临时为了解决问题而直接写出来的. 可以大概说一下相乘和相加的解决思路(当然,大数操作基本就是两个字符串的操 ...
- Strassen 矩阵相乘算法(转)
偶尔在算法课本上面看到矩阵相乘的算法,联想到自己曾经在蓝桥杯系统上曾经做过一道矩阵相乘的题目,当时用的是普通的矩阵相乘的方法,效率极低,勉强通过编译.所以决定研究一下Strassen矩阵相乘算法,由于 ...
- Java 大数相乘、大数相加、大数相减
思路来源:: https://blog.csdn.net/lichong_87/article/details/6860329 /** * @date 2018/6/22 * @description ...
- KMP算法-Python版
KMP算法-Python版 传统法: 从左到右一个个匹配,如果这个过程中有某个字符不匹配,就跳回去,将模式串向右移动一位.这有什么难的? 我们可以 ...
- 华为上机测试题(大数相乘-java)
PS:这个不是自己写的,测试OK,供参考. /** * 大数相乘 */ public class BigData { public static void main(String[] args) { ...
随机推荐
- 使用LVS实现负载平衡之Windows Server 2008配置
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一.承载于 II ...
- 初始化 Ubuntu Trusty 14.04
1. 软件源 sudo vim /etc/apt/source.list # 将软件源改为 sohu 的 deb http://mirrors.sohu.com/ubuntu/ trusty main ...
- C# 使用NLog记录日志
NLog是一个记录日志组件,和log4net一样被广泛使用,它可以将日志保存到文本文件.CSV.控制台.VS调试窗口.数据库等.最近刚用到这个组件,觉得不错,水一篇. 下载 通过Nuget安装NLog ...
- NP完全问题 NP-Completeness
原创翻译加学习笔记,方便国人学习算法知识! 原文链接http://www.geeksforgeeks.org/np-completeness-set-1/ 我们已经找到很多很高效的算法来解决很难得问题 ...
- HDU 4454 Stealing a Cake --枚举
题意: 给一个点,一个圆,一个矩形, 求一条折线,从点出发,到圆,再到矩形的最短距离. 解法: 因为答案要求输出两位小数即可,精确度要求不是很高,于是可以试着爆一发,暴力角度得到圆上的点,然后求个距离 ...
- UVA 12730 Skyrk's Bar --期望问题
题意:有n个地方,现在要站人进去,而每两个人之间至少要隔k个空地,问这n个地方能站的人数的期望是多少. 分析:考虑dp[i]表示 i 个地方能站的期望数,从左往右推, 如果i-k-1<1,那么最 ...
- HDU 1251 统计难题
字典树又一基本题 代码: #include <iostream> #include <cstdio> #include <cstring> #include < ...
- MongoDB学习(三)数据导入导出及备份恢复
这几天想着公司要用MongoDB,自然就要用到数据导入导出,就自己学习了一下. 在Mongo学习(二)中就讲到了在bin目录下有一些工具,本篇就是使用这些工具进行数据的导入导出及备份恢复. 注意:以下 ...
- 使用CuteSlider做网站炫酷的幻灯片
cuteSlider 1.预览 官网:http://www.cuteslider.com/ 应用:http://www.dutphonelab.org/ 2.资料 文档:http://pan.baid ...
- SQLite 解决:Could not load file or assembly 'System.Data.SQLite ... 试图加载格式不正确的程序/or one of its dependencies. 找不到指定的模块。
Could not load file or assembly 'System.Data.SQLite.dll' or one of its dependencies. 找不到指定的模块. 错误提示 ...