大数乘法(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的长度 ...
随机推荐
- const char* to char*(当函数传递参数时)
来自 https://blog.csdn.net/rongrongyaofeiqi/article/details/52442169 https://blog.csdn.net/hebbely/art ...
- java课堂疑问解答与思考2
问题一 编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. 答:Xn+1=(7^5*Xn)mod(2^31-1) 程序源码: import java.util.Random; imp ...
- ubuntu16.04+Titan Xp安装显卡驱动+Cuda9.0+cudnn
硬件环境 ubuntu 16.04LTS + windows10 双系统 NVIDIA TiTan XP 显卡(12G) 软件环境 搜狗输入法 显卡驱动:LINUX X64 (AMD64/EM64T) ...
- vue ----》实现打印功能
1.安装打印相关依赖 cnpm install vue-print-nb --save 2.安装后,在main.js文件中引入 import Print from 'vue-print-nb' Vue ...
- elasticsearch windows环境安装和配置
写给13岁代码童工小侄女的图文教程: 注:建议用迅雷,右键点击 复制链接 会自动弹框的.所有配置全部用默认的就可以正常跑 1,安装JDK1.7及以上,已经安装好的就不用再安装了 2,安装 Nod ...
- 小记----采集之Xpath
一.XPATH简介 Xpath是XML路径语言,它是一种确定XML文档中某部分位置的语言 二.XPATH语法 XPATH使用路径表达式在XML文档中选取节点.节点是通过沿着路径或者step来选取 ...
- java方法形参是引用类型
public void 方法名(Student s) 这里形参需要的是该类的对象或者子类对象(父类引用子类对象). 1.若为普通类:则可传入该类的实例对象即可,方法名(new Student()): ...
- C++中的三种继承方式
1,被忽略的细节: 1,冒号( :)表示继承关系,Parent 表示被继承的类,public 的意义是什么? class Parent { }; class Child : public Parent ...
- vue使用Vuex, IE浏览器报错
错误: [vuex] vuex requires a Promise polyfill in this browser. 原因:因为使用了 ES6 中用来传递异步消息的的Promise,而IE低版本 ...
- js 学习四 对象应用 吃货游戏
游戏来源于 Mdn学习网站: 该例子用于对象的理解非常有效(建议看完上面网站的内容在开始练习) 弹球 body { margin: 0; overflow: hidden; font-family: ...