电商网站的好处,汕头市澄海区,wordpress 判断浏览器,智能建站公司P2142 高精度减法 - 洛谷 | 计算机科学教育新生态
我们两个整数一定要是大数减去小数#xff0c;所以这个点我们需要特判一下#xff0c;那我们两个字符串表示的整型怎么判断大小呢#xff0c;我们字典序比较大小和真实的数字比较大小是一样的#xff0c;比如我们的‘21’…P2142 高精度减法 - 洛谷 | 计算机科学教育新生态
我们两个整数一定要是大数减去小数所以这个点我们需要特判一下那我们两个字符串表示的整型怎么判断大小呢我们字典序比较大小和真实的数字比较大小是一样的比如我们的‘21’和‘13’ 2的字典序是大于1的所以‘21’大于‘13’
但是是有特殊情况的比如按字典序‘101’是小于‘91’的所以我们比较的时候应当先比较字符串长度长度长的一定是大数
模拟完大小比较之后我们就按小学列竖式一样来进行我们的高精度算法把两个数逆序存储在数组里c[i]a[i]-b[i]如果是负数的话我们就要借一位
下面我们来实现一下代码
#include iostream
#include algorithm
using namespace std;
const int N 1e5 10;
int a[N], b[N], c[N];
int la, lb, lc;
bool cmp(string x, string y)
{if (x.size() ! y.size()) return x.size() y.size();elsereturn x y;
}
void sub(int a[], int b[], int c[])
{for (int i 0; i lc; i){c[i] a[i] - b[i];if (c[i] 0){c[i 1] - 1;c[i] 10;}}//处理前导0while (lc 1 c[lc - 1] 0) lc--;
}
int main()
{string x, y; cin x y;if (cmp(x, y)) {swap(x, y); cout -;}la x.size(); lb y.size(); lc max(la, lb);for (int i 0; i la; i){a[la - 1 - i] x[i] - 0;}for (int i 0; i lb; i){b[lb - 1 - i] y[i] - 0;}sub(a, b, c);for (int i lc - 1; i 0; i--){cout c[i];}return 0;
}