洛谷P1303高精度A×B
1. 题目描述
求两数的积。每个数字不超过10的2000次方,需用高精。
2. Notes
本题模拟的是竖式乘法运算,算出每一位与大数的乘积再错位相加。
竖式乘法的原理:
比如12345×1234=12345×(1000+200+30+4),我们平时列竖式的时候只是把最后几位的0省去了。这样就将两个大数相乘转化为一个大数乘以一个一位数字再相加。用string类对象赋值时要注意的地方
1
2
3
4
5
6
7
8
9
10string str[10]; //定义一个10个大小的string对象数组
str[1][0]='a';
/*
按上述方法赋值,str[1]这个字符串第一个字符不是a,输出str[1]为空串
因为str[1][0]这个位置还没有分配,所以为空
若想赋值按下述方法对str[1]这个字符串级别的变量进行赋值
不要对还没分配空间的字符字符级别进行赋值(如此处的str[1][0])
*/
str[1].append("a");
str[1]=str[1]+'a';高精乘思路:
- $a,b$中有0直接返回0,否则将$a,b$倒置。
- 模拟竖式乘法,假设$a$在上方,$b$在下方,用$b$的每一位与$a$相乘再加上来自低位的进位,取余取整分别作为该位的值和进位。
- $b$的中的一位与$a$中每一位乘完仍然有可能有进位,记得检验。(乘法中每一位的进位不超过9)。
- 按照当前$b$中数字所在的位数进行补0。
- 调用高精加求和即可。
3. 题解
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 协议 ,转载请注明出处!