高精度加法运算
#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.length() <= b.length()) {//将长的字符串放在前面 swap(a, b); } for (i = a.length()-1, j = b.length()-1; j >= 0; i--, j--) {//从最低位相加,相加他们的公共部分 c[k++] = (r + a[i] - '0' + b[j] - '0') % 10;//两个位数和进位的相加后取个位 r = (r + a[i] - '0' + b[j] - '0') / 10;//记录进位 } while (i >= 0)//再把a中剩下的继续加 { c[k++] = (r + a[i] - '0') % 10; r = (r + a[i] - '0') / 10; i--; } if (r) c[k++] = r; //如果还有进位,进到最高位 for (i = k - 1; i >= 0; i--) {//输出 if (c[i] != 0||flag) { cout << c[i]; flag = true; } } if (flag == false) {//如果都没有输出,说明相加结果为0,应当输出0 cout << 0; }; return 0;}
高精度减法运算
#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;
}
高精度乘法