高精度数的存储以及加减运算

高精度数的存储:

用数组来存储,先将大数用字符串输入,再存入数组。

 

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 }

 

你可能感兴趣的:(高精度数的存储以及加减运算)