高精度数的存储以及加减运算
高精度数的存储:
用数组来存储,先将大数用字符串输入,再存入数组。
1 string s; 2 int a[100]; 3 int n = s.size(); 4 for(int i = 0; i < n; i++) 5 a[i] = s[n-i-1]-'0';
此处注意,数的低位在s下标高的地方,我是将低位存在数组下标小的位置。
高精度数的加法:
此处假设,两个高精度数已经分别存入数组a和b,n1是a的长度,n2是b的长度,结果存入数组c中,模拟列竖式加法即可,有进位。
1 int n = n1>n2?n1:n2; 2 for(int i = 0; i < n; i++) 3 { 4 // 这个判断处理进位操作,应该很好理解 5 if(a[i]+b[i] >= 10) 6 { 7 c[i] += a[i]+b[i]-10; 8 c[i+1]++; 9 } else c[i] += a[i]+b[i]; 10 }
此代码不严谨,做出修改:(2020/8/4)
1 n = n1>n2?n1:n2; 2 //主要是增加判断了结果位数是否需要加一 3 for(int i = 0; i < n; i++) 4 { 5 c[i] += a[i]+b[i]; 6 if(c[i] >= 10) 7 { 8 c[i] = c[i]-10; 9 c[i+1]++; 10 } 11 if(i == n-1 && c[i+1] != 0) {n++; break;} 12 }
高精度数的减法:
同样假设两个数组a和b,长度都为n,a中的数大于b中的数,结果存入数组c中。
1 for(int i = 0; i < n; i++) 2 { 3 if(a[i]-b[i] < 0) 4 { 5 c[i] += a[i]-b[i]+10; 6 c[i+1]--; 7 } else c[i] += a[i]+b[i]; 8 }

浙公网安备 33010602011771号