前言
为什么要用高精度算法?
-
在C/C++中,我们经常会碰到限定数据范围的情况,我们先来看常用的int和long long两种数据类型的范围吧。
-
int占32位,即4个字节,所以int的范围是[ − 2 31 -2^{31} −231 , 2 31 − 1 2^{31}-1 231−1],为 1 0 9 10^9 109数量级
-
long long占64位,即8个字节,所以long long的范围是[ − 2 63 -2^{63} −263 , 2 63 − 1 2^{63}-1 263−1],为 1 0 18 10^{18} 1018数量级。
-
如果超过该数量级,该怎么办?那就需要用到高精度算法。
2 31 2^{31} 231 = 2147483648 (10位数)
2 63 2^{63} 263 = 9223372036854775808 (19位数)
1、高精度加法
1.1问题描述
1.2:竖式加法
1.3算法核心
1.4代码示例
#include<iostream>
#include<cstdio> //c语言头文件
#include<cstring> //strlen()的头文件
#include<cstdlib> //max()的头文件
using namespace std;
char s1[505], s2[505];
int a[505], b[505], c[505];
int main(){
//定义在main()里面的数组会有问题
// char s1[505], s2[505];
// int a[505], b[505], c[505];
int La, Lb, Lc;
scanf("%s", s1);
scanf("%s", s2);
La = strlen(s1); //La = 4
Lb = strlen(s2); //Lb = 3
//检查
// cout << La << ' ' << Lb;
for(int i = 0; i < La; i++){
a[La - i] = s1[i] - '0';
}
for(int i = 0; i < Lb; i++){
b[Lb - i] = s2[i] - '0';
}
Lc = max(La, Lb) + 1; //Lc = 5
for(int i = 1; i <= Lc; i++){
c[i] += a[i] + b[i];
c[i+1] = c[i]/10; //进位
c[i] = c[i]%10;
}
if(c[Lc] == 0 && Lc > 0){ //解决特例:去除前面的0
Lc--;
}
for(int i = Lc; i > 0; i--){
printf("%d", c[i]);
}
return 0;
}
- 前导0的处理
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。