高精度(加减乘除)
高精度的核心思想就是利用数组去储存大数,然后通过模拟手动计算的方式,来进行计算。
主要分三个模块:
1.读入数据并转换为(int)类型储存
高精度加法
核心思想:将每个位上的数字都+起来,如果大于10就进位。
核心代码如下:- c[i]+=a[i]+b[i];//两数相加
- c[i+1]+=c[i]/10;//进位
- c[i] = c[i]%10;//保留
复制代码 完整代码及解析如下:
[code]string x, y;//两个string类用来接收大数//a接收x中的每一位数字,b用来接收y中的每一位数组,计算之后,储存到c数组中int a[999], b[999], c[999];int main(){ cin >> x >> y;//读入 //将大数的每一位数转换为(int)类型,然后倒序储存 for (int i = 0; i < x.length(); i++) { a = x[x.length() - 1 - i]-'0'; } for (int i = 0; i < y.length(); i++) { b = y[y.length() - 1 - i]-'0'; } //核心:开始计算 //位数问题:两个数相加,和的位数等于max(x.length(), y.length(),或者是其+1; for (int i = 0; i < max(x.length(), y.length()); i++) { c += a + b;//对应位数求和 c[i + 1] += c / 10;//进位 c = c % 10;//保留 } //下面开始消除前导0 int k = 0;//利用k来修正位数 if (c[max(x.length(), y.length())] == 0)//如果最高位==0 { k = 1;//k++输出位数-1 } //注意看k是如何控制位数的 for (int i = max(x.length(), y.length())-k; i >=0 ; i--) { cout x >> y; //因为x-y有负数存在,所以我们只用大数减小数,最后补全-号就行 //下面进行比较:如果y比x大,就交换位置,并输出-号 if (cmp(x, y) == false)//详见上方的cmp函数 { swap(x, y); cout 0; i--) { if (c == 0) { k++; } else { break; } } for (int i = max(x.length(), y.length())-k; i >= 0; i--) { cout y; for (int i = 0; i < x.length(); i++) { a[i+1] = x[x.length() - 1 - i]-'0'; } for (int i = 0; i < y.length(); i++) { b[i+1] = y[y.length() - 1 - i]-'0'; } //核心代码 for (int i = 1; i =1 ; i--) { cout s >> b; //注意除法时是正序输入 for (int i = 0;i |