文章目录四、高精度除法
【带图详解【算法模板】高精度模板】一、高精度加法模板
输入两个数到变量中,然后用赋值语句求它们的和后输出 . 但是,我们知道,在 C/C++ 语言中任何数据类型都有一定表示范围. 当两个加数很大时,以前的算法显然不能求出精确解,因此我们需要寻求另一种方法 .在读小学时,我们做加法都采用竖式方法 . 这样我们方便写出两个整数相加的算法 .
c[0]=1,c[1]=1,c[2]=1,c[3]=1;
需要注意c从个位开始的,输出需从最大位序倒叙输出(置输出要去除多余的零)
#include
二、高精度减法模板
类似加法,同样使用竖式 。在做减法运算时,需要注意的是:需要有借位处理 。
#include
文章插图
三、高精度乘法模板
和加法类似
3.1 高精乘以低精(普遍用到)
#includeusing namespace std;const int N = 10000;#define LENGTH 1001void HighMul(string x, int y) {int a[1000] = { 0 }, len;for (int i = 0; i < x.size(); i++)a[i] = x[x.size() - i - 1] - '0';len = x.size();int tmp=0;for (int i = 0; i < len; i++) {a[i]= a[i] * y+tmp;//运算tmp = a[i] / 10;//进位a[i] %= 10;}//进位不为0if (tmp != 0) {a[len] = tmp;len++;while (a[len-1] > 0) //刚存进去的进位,判断是否大于10需要进位{a[len] = a[len - 1] / 10;a[len - 1] %= 10;len++;}}while ((a[len - 1] == 0) && (len > 1)) len--;for (int i = len - 1; i >= 0; i--)printf("%d", a[i]);}
高精乘以高精
主要怎么存储问题:
我们再声明一个数组c来储存答案 。大家通过一个简单的乘法运算进行模拟就可以看出,以同样的储存规则,
a[0] * b[0] = c[0];
a[0] * b[1] + a[1] * b[0] = c[1];
逐渐我们可以发现规律: "c[i + j] += a[i] * b[j]"同过一个循环去实现,就可以把c[i + j]计算出来,需要指出的是,这里的计算我们还没有进行进位处理 。
- 336个幽默成语之“最”大合集, 有趣又好记!给孩子收藏细读 世界之最成语
- 清朝太监用什么方法防死后被掘坟?
- P5730 【深基5.例10】显示屏 - 字符表问题
- 徐昭佩是谁?萧绎只得徐妃半面妆的故事
- 秦始皇陵迷之地宫:受高人指点构建江河湖海
- 上 html5+css3学习
- 配柴油2.0升动力,欧马可S1新小卡能拉1.8吨货,售价9.66万起 柴油轻卡汽车大全
- 新款帕萨特正式上市,卖17.99万元起!共13款车型,就问你香不香? 上海大众车型大全图片
- task2 【南瓜书ML】线性模型的数学推导(最小二乘估计、广义瑞利商、极大似
- 【一起入门MachineLearning】中科院机器学习-期末题库