高精度加法
Posted gnftau
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高精度加法相关的知识,希望对你有一定的参考价值。
网上有很多用c/c++写的关于高精度的加法问题,我从中找了几个比较容易理解的结合了,在加上自己想的就成了下面的代码。
毕竟知道是数组模拟的就行,python对高精度的处理很是简单,这个我觉得了解就行。
虽然此方法算不上代码简洁,甚至有些冗长,但是我觉得还是挺好理解的。
废话不多说,先讲讲思路:
1.首先需要两个字符数组,三个int数组,分别用于储存输入的“数字”字符串以及将字符转换成数字后的储存;
2.找到较长数组的长度记为max;
3.将字符串s1,s2中每个字符数字,转换成阿拉伯数字,同时进行逆序储存;
4,对a,b各项直接相加,结果保存在c数组中;
5,对c数组数字进行处理,即大于9就减去10,c[i]-=10,同时下一位c[i+1]++(进位操作)
6,注意对最后一位数单独判断,再进行输出,详情参考代码;
#include <stdio.h> #include <string.h> int a[10005]; int b[10005]; int c[10005]; char s1[10005]; char s2[10005]; int main(void) { int max; //初始化数组,使得一开始都为0 memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); scanf("%s",s1); getchar(); scanf("%s",s2); //长度的处理 int ha = strlen(s1); int hb = strlen(s2); if (ha > hb) max = ha; else max = hb; //倒置 for (int i = 0; i < ha; i++) a[i] = s1[ha - 1 - i]-‘0‘; for (int i = 0; i < hb; i++) b[i] = s2[hb - 1 - i]-‘0‘; //数组相加 for (int i = 0; i < max; i++) { c[i] = a[i]+b[i]; } //对于进位的处理 for (int i = 0; i < max-1; i++) { if (c[i] > 9) { c[i] -= 10; c[i + 1]++; } }
//对于数组中最后一位(实际是阿拉伯数字的最高位)处理 if (c[max - 1] > 9) { int i; c[max - 1] -= 10; printf("1"); for (i = max - 1; i > 0; i--) printf("%d",c[i]); printf("%d ",c[i]); } else { int i; for (i = max - 1; i > 0; i--) printf("%d",c[i]); printf("%d ",c[i]); } return 0; }
以上是关于高精度加法的主要内容,如果未能解决你的问题,请参考以下文章