时间限制: 1000 ms 内存限制: 65536 KB
提交数: 2171 通过数: 1174

【题目描述】

求两个不超过200位的非负整数的积。

【输入】

有两行,每行是一个不超过200位的非负整数,没有多余的前导0。

【输出】

一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

【输入样例】

12345678900
98765432100

【输出样例】

1219326311126352690000

【来源】

No

【代码】

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
int main( )
{int a[250]={0},b[250]={0},c[40000]={0},la,lb;int result=0,res=0,t=1;   //result用于暂时代替数组c的值,res用于进位的值,t表示最后积数组的下标char a1[201],b1[201];gets(a1);gets(b1);la=strlen(a1);lb=strlen(b1);for(int i=0;i<=la-1;i++)   //进行倒序{a[la-i]=a1[i]-48;   //48表示0的Ascii码值}for(int i=0;i<=lb-1;i++)   //进行倒序{b[lb-i]=b1[i]-48;}for(int i=1;i<=lb;i++){res=0;for(int j=1;j<=la;j++){t=j+i;result=a[j]*b[i]+res+c[t-1];  //不仅要加上进位的数res还要加上之前计算的c[t-1]的值res=result/10;     //进位数res取模c[t-1]=result%10;    //进行除10得到当前位置数组c[]的值}while(res) {c[t++]=res%10;   //t++表示先赋值后进行自增res=res/10;}}while(c[t]==0) //删除多余前导0{t--;}for(int i=t;i>=1;i--)   //最后倒序输出{cout<<c[i];}return 0;
}

【解题思路】

难点:乘法进位的处理

1.自己可以在草稿本上进行乘法运算,你可以发现 当你在做乘法运算的时候,你是从最左边的数字进行运算的,因此和大整数加法一样要进行倒序

for(int i=0;i<=la-1;i++)   //进行倒序{a[la-i]=a1[i]-48;   //48表示0的Ascii码值}

2.下面的是核心代码,也就是对大整数乘法的处理,大整数乘法和大整数加法的代码很像,只是将“c[lc]=a[lc]+b[lc]+x;”改成了“result=a[j]*b[i]+res+c[t-1];”,将加法改成了乘法,多加了一个c[t-1],为什么要多加一个c[t-1]呢?因为当你乘第一个数的时候已经要占用c的数组了,而且乘第二个数的时候还要将第一个数的占用的当前数组的值加起来。(在计算483x5的时候,5不仅要加上进位数还要加上4)

for(int i=1;i<=lb;i++){res=0;for(int j=1;j<=la;j++){t=j+i;result=a[j]*b[i]+res+c[t-1];  //不仅要加上进位的数res还要加上之前计算的c[t-1]的值res=result/10;     //进位数res取模c[t-1]=result%10;    //进行除10得到当前位置数组c[]的值}while(res) {c[t++]=res%10;   //t++表示先赋值后进行自增res=res/10;}}

3.最后注意要将前导0删掉,以及倒序输出。

1174:大整数乘法相关推荐

  1. 信息学奥赛一本通 1307:【例1.3】高精度乘法 | 1174:大整数乘法 | OpenJudge NOI 1.13 09:大整数乘法

    [题目链接] ybt 1307:[例1.3]高精度乘法 ybt 1174:大整数乘法 OpenJudge NOI 1.13 09:大整数乘法 [题目考点] 1. 高精度 考察:高精乘高精 高精度计算讲 ...

  2. 信息学奥赛一本通(1174:大整数乘法)

    1174:大整数乘法 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 12480     通过数: 7002 [题目描述] 求两个不超过200位的非负整数的积. [ ...

  3. 使用快速傅里叶变换计算大整数乘法-代码

    在上一篇随笔"使用快速傅里叶变换计算大整数乘法"中,已经讲述了使用快速傅里叶变换计算大整数乘法的原理.在这一篇随笔中,我们就使用快速傅里叶变换来实现一个提供任意精度的算术运算的静态 ...

  4. 大整数乘法c语言代码_大整数乘法

    大整数乘法和我们小学学过的乘法公式一样(如下图),就是按位相乘,两个数中的每一位彼此相乘,然后将相同列的结果加起来,最后统一处理进位即可. #include <iostream> #inc ...

  5. 大整数乘法--leetcode Multiply Strings

    大整数乘法 本文转载自http://www.cnblogs.com/TenosDoIt/p/3735309.html 我们在日常的大整数计算中,通常是把它转化为字符型计算.这道题的思路就和我们小学计算 ...

  6. python两数相乘代码_Python 实现大整数乘法算法的示例代码

    我们平时接触的长乘法,按位相乘,是一种时间复杂度为 O(n ^ 2) 的算法.今天,我们来介绍一种时间复杂度为 O (n ^ log 3) 的大整数乘法(log 表示以 2 为底的对数). 介绍原理 ...

  7. 计算机算法设计与分析 大整数乘法

    大整数乘法 问题描述 求两个不超过200位的非负整数的积. 输入形式 有两行,每行是一个不超过200位的非负整数,没有多余的前导0. 输出形式 一行,即相乘后的结果.结果里不能有多余的前导0,即如果结 ...

  8. Bailian2980 大整数乘法【大数】

    2980:大整数乘法 总时间限制: 1000ms 内存限制: 65536kB 描述 求两个不超过200位的非负整数的积. 输入 有两行,每行是一个不超过200位的非负整数,没有多余的前导0. 输出 一 ...

  9. 大整数乘法(Karatsuba算法的字符串形式的C++实现)

    #include <iostream> #include <sstream> #include <cstring> using namespace std;/函数声 ...

最新文章

  1. 对讲机的那点事:带你玩转LD800数字车载台读、写频操作:一
  2. NHibernate Step by Step:序篇 (转)
  3. 数据库面试题【十八、优化关联查询优化子查询优化LIMIT分页优化UNION查询优化WHERE子句】
  4. 2018+计算机软件,2018年6月考试《计算机软件技术基础(1)》在线考核试题
  5. jQuery中的事件机制与DOM操作
  6. php 开启coredump,GDB分析PHP连接Memcached 导致coredump问题
  7. 查询php copy函数源码,PHP copy函数使用案例代码解析
  8. 服务器重装系统要注意什么_视频海外服务器前期要准备什么?
  9. c语言国家二级培训机构,国家计算机二级C语言培训教案.doc
  10. 解决win7检测不到第二个显示器的方法
  11. 【SCIRLab】ACL20 基于图注意力网络的多粒度机器阅读理解文档建模
  12. Linux递归统计当前目录下普通文件的数量
  13. matlab ofdm系统 过采样和欠采样,样本不均衡解决方法-过采样与欠采样
  14. 系统查看PSD缩略图
  15. 利用ESP8266与米思齐从零制作模拟温室大棚--硬件篇
  16. PCB设计中电流与线宽的关系
  17. QQ浏览器 不支持html5,浏览器常见问题_浏览器高级功能_浏览器在线帮助-QQ浏览器官网...
  18. 基于大疆dij_irp.exe进行红外测温
  19. Linux下如何查看硬盘型号、序列号、缓存 CPU 主板 等信息
  20. 天使纪元392服务器维护,天使纪元公测什么时候能玩 天使纪元1月11日服务器什么时候能进...

热门文章

  1. 学好C/C++编程,走遍天下都不怕
  2. 在python平台上利用pymol来查找PDB文件中蛋白质的相互作用位点
  3. 介绍几个常用的免费的Web前端开发工具
  4. android studio 打包cocos creator项目
  5. Linux 系统设置 : insmod 命令详解
  6. 下载安装破解idea2018
  7. Linux C 指针
  8. Centos7离线安装autoconf
  9. GCC编译静态库的-fPIC选项
  10. JAVA版本号的问题 Java版本号与JDK版本