高精度加法运算

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main() {
  4. string a, b;
  5. bool flag = false;
  6. int c[10000];
  7. int i, j, r = 0, k = 0;
  8. cin >> a;
  9. cin >> b;
  10. if (a.length() <= b.length()) {//将长的字符串放在前面
  11. swap(a, b);
  12. }
  13. for (i = a.length()-1, j = b.length()-1; j >= 0; i--, j--) {//从最低位相加,相加他们的公共部分
  14. c[k++] = (r + a[i] - '0' + b[j] - '0') % 10;//两个位数和进位的相加后取个位
  15. r = (r + a[i] - '0' + b[j] - '0') / 10;//记录进位
  16. }
  17. while (i >= 0)//再把a中剩下的继续加
  18. {
  19. c[k++] = (r + a[i] - '0') % 10;
  20. r = (r + a[i] - '0') / 10;
  21. i--;
  22. }
  23. if (r) c[k++] = r; //如果还有进位,进到最高位
  24. for (i = k - 1; i >= 0; i--) {//输出
  25. if (c[i] != 0||flag) {
  26. cout << c[i];
  27. flag = true;
  28. }
  29. }
  30. if (flag == false) {//如果都没有输出,说明相加结果为0,应当输出0
  31. cout << 0;
  32. }
  33. ; return 0;
  34. }

高精度减法运算

#include<bits/stdc++.h>
using namespace std;


int main() {
    string a, b;
    bool flag = false;
    int c[10000];
    int i, j, r = 0, k = 0;

    cin >> a;
    cin >> b;
    if (a.size() < b.size() || a.size() == b.size() && a < b)//把大的字符串放前面,方便操作 ,还要判断相减是否为负数 
    {
        cout << "-";
        swap(a, b);
    }


    for (i = a.size() - 1, j = b.size() - 1; j >= 0; i--, j--)
    {
        c[k++] = (a[i] - b[j] - r);//两个位数相减再减去接的位数 
        r = 0;//清零标记 
        if (c[k - 1] < 0) { c[k - 1] += 10; r = 1; }//如果是负数就借十,并标记 
    }
    while (i >= 0)//剩下的继续减
    {
        c[k++] = (a[i] - '0' - r);//减去借的 
        r = 0;//清零标记 
        if (c[k - 1] < 0) { c[k - 1] += 10; r = 1; }//如果是负数就借十,并标记 
        i--;
    }
    for (i = k - 1; i >= 0; i--)//输出 
    {
        if (c[i] != 0 || flag)//防止前导0输出的操作 
        {
            cout << c[i];
            flag = true;
        }
    }
    if (flag == false)cout << 0;//如果都没有输出,说明相减结果为0,应当输出0 
    return 0;

}

高精度乘法