大数乘法(A * B Problem Plus)问题
大数乘法问题一般可以通过将大数转换为数组来解决。
解题思路
第1步

第2步

第3步

第4步

样例
输入1:
56 744
输出1:
800
输入2:
-10 678
输出2:
-6780
输入3:
1234567890 45678901234
输出3:
56393704713977776260
代码实现
#include<stdio.h>
#include<string.h>
#define MAX 1000
// 大数乘法
void Multiply(char* tempA, char* tempB, int* prod, int lenA, int lenB)
{
for (int i = 0; i < lenA; i++)
{
for (int j = 0; j < lenB; j++)
{
prod[i+j] += (tempA[i] - '0')*(tempB[j] - '0');
}
}
for (int i = lenA + lenB - 1 - 1; i > 0; i--)
{
// 如果本位大于9,则保留本位数的个位,十位向左进位
if (prod[i] > 9)
{
prod[i-1] += prod[i] / 10;
prod[i] %= 10;
}
}
}
int main()
{
char strA[MAX] = {0};
char strB[MAX] = {0};
while (scanf("%s%s", strA, strB) != EOF)
{
char tempA[MAX] = {0};
char tempB[MAX] = {0};
int prod[2*MAX] = {0};
int lenA = 0;
int lenB = 0;
int negNumA = 0;
int negNumB = 0;
lenA = strlen(strA); // 计算字符串A的长度
lenB = strlen(strB); // 计算字符串A的长度
// 去掉字符串A和B的负号
if (strA[0] == '-')
{
negNumA++;
lenA--;
}
if (strB[0] == '-')
{
negNumB++;
lenB--;
}
// 把去掉负号的字符串存储到temp数组中
for (int i = 0; i < lenA; i++)
{
tempA[i] = strA[i+negNumA];
}
for(int j = 0; j < lenB; j++)
{
tempB[j] = strB[j+negNumB];
}
Multiply(tempA, tempB, prod, lenA, lenB);
// 如果prod数组的第一个元素是0,则直接输出0,如100*0=000,输出0
if (prod[0] == 0)
{
printf("%d", prod[0]);
}
// 打印负号
if (negNumA + negNumB == 1)
{
printf("-");
}
// 打印A*B的结果,N位数和M位数相乘的最大位数为N+M
for (int i = 0; i < lenA + lenB - 1; i++)
{
if (prod[0] != 0)
{
printf("%d", prod[i]);
}
}
printf("\n");
}
return 0;
}
个人主页:
大数乘法(A * B Problem Plus)问题的更多相关文章
- (母函数 Catalan数 大数乘法 大数除法) Train Problem II hdu1023
Train Problem II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- [POJ] #1001# Exponentiation : 大数乘法
一. 题目 Exponentiation Time Limit: 500MS Memory Limit: 10000K Total Submissions: 156373 Accepted: ...
- Uva-oj Product 大数乘法
Product Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Status Des ...
- hdu-5666 Segment(俄罗斯乘法or大数乘法取模)
题目链接: Segment Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) P ...
- hdu1313 Round and Round We Go (大数乘法)
Problem Description A cyclic number is an integer n digits in length which, when multiplied by any i ...
- 51nod 1027大数乘法
题目链接:51nod 1027大数乘法 直接模板了. #include<cstdio> #include<cstring> using namespace std; ; ; ; ...
- 用分治法实现大数乘法,加法,减法(java实现)
大数乘法即多项式乘法问题,求A(x)与B(x)的乘积C(x),朴素解法的复杂度O(n^2),基本思想是把多项式A(x)与B(x)写成 A(x)=a*x^m+b B(x)=c*x^m+d 其中a,b,c ...
- HDOJ-1042 N!(大数乘法)
http://acm.hdu.edu.cn/showproblem.php?pid=1042 题意清晰..简单明了开门见山的大数乘法.. 10000的阶乘有35000多位 数组有36000够了 # i ...
- 51 Nod 1027 大数乘法【Java大数乱搞】
1027 大数乘法 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出2个大整数A,B,计算A*B的结果. Input 第1行:大数A 第2行:大数B (A,B的长度 ...
随机推荐
- Kafka sender消息生产者
1.pom文件引入Kafka依赖(我用的版本是2.2.2.RELEASE) <dependency> <groupId>org.springframework.kafka< ...
- [深度概念]·Attention Model(注意力模型)学习笔记
此文源自一个博客,笔者用黑体做了注释与解读,方便自己和大家深入理解Attention model,写的不对地方欢迎批评指正.. 1.Attention Model 概述 深度学习里的Attention ...
- css3实现倾斜转动的转盘
HTML代码: <div class="r-1">a</div> <div class="r-2">a</div> ...
- [转帖]什么是 LLVM?Swift, Rust, Clang 等语言背后的支持
要了解用于以编程方式生成机器原生代码的编译器框架是如何让新语言的推出以及对现有的语言进行增强比以往更加容易了. https://www.oschina.net/translate/what-is-ll ...
- Linux 下面根据端口号 查询 可执行程序的路劲的方法
1. 安装上lsof 的包 2. 使用 lsof 命令查看相关进程 lsof -i: 效果为: 3. 根据/proc 的目录查看可执行目录的文件位置 ll /proc/procid # procid ...
- python生成饼图解决中文乱码
解决乱码问题 乱码的原因 字体的不匹配 解决的方法 加上引用中文字体就好了 matplotlib.rcParams['font.sans-serif'] = ['SimHei'] 代码 def sta ...
- CF 11D A Simple Task 题解
题面 这道题的数据范围一看就是dfs或状压啦~ 本文以状压的方式来讲解 f[i][j]表示目前的节点是i,已经经历过的节点的状态为j的简单环的个数: 具体的转移方程和细节请看代码: PS:(i& ...
- gcc数据对齐之: howto 1.
GCC支持用__attribute__为变量.类型.函数.标签指定特殊属性.这些不是编程语言标准里的内容,而属于编译器对语言的扩展. 本文介绍其中的两个属性:aligned和packed. align ...
- $().click()和$(document).on('click','要选择的元素',function(){})的不同(转https://www.cnblogs.com/sqh17/p/7746418.html)
$(document).on();用于动态绑定事件 jQuery的出现,大大简化了对dom的操作,但是如果不是仔细阅读api和进行操作,就不知道其中最大的优点和使用方式.就拿$().click()和$ ...
- day 01 常量 注释 int(整型) 用户交互input 流程控制语句if
python的编程语言分类(重点) if 3 > 2: 编译型: 将代码一次性全部编译成二进制,然后再执行. 优点:执行效率高. 缺点:开发效率低,不能跨平台. 代表语言:C 解释型: 逐行解释 ...