[题目描述]
求两个大的正整数相减的差。
☑输入
共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。
☑输出
一行,即所求的差。
☑样例输入
9999999999999999999999999999999999999 9999999999999
☑样例输出
9999999999999999999999990000000000000
☑温馨小贴士 :
如果你看到这一道题,想到的是直接输出a-b,那么我劝你:好好
审审题,免得做完之后报0还得回炉重造。
☑解题思路
好心的作者怕你们看见思路后脑暴,没有写(其实就是太懒)
至于思路,哈哈,您就尽管猜吧!那叫一个地道。
☑答案
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int a[N], b[N], result[N];
string s1, s2;
int lena, lenb, lenmax;
bool fu = false;
bool checkzf()
{
int flag = 0;
if(lena > lenb) return true;
if(lena < lenb) return false;
if(lena == lenb)
{
for(int i = lena - 1; i >= 0; i--)
{
if(a[i] > b[i])
{
flag = 1;
return true;
}
if(a[i] < b[i])
{
flag = 1;
return false;
}
}
}
if(flag == 0) return true;
}
int main()
{
cin >> s1 >> s2;
lena = s1.size();
lenb = s2.size();
lenmax = max(lena, lenb);
for(int i = 0; i < lena; i++) a[i] = s1[lena - i - 1] - '0';
for(int i = 0; i < lenb; i++) b[i] = s2[lenb - i - 1] - '0';
if(checkzf()) {
for(int i = 0; i < lena; i++)
{
if(a[i] < b[i])
{
a[i + 1]--;
a[i] += 10;
}
result[i] = a[i] - b[i];
}
}
else
{
fu = true;
for(int i = 0; i < lenmax; i++)
{
if(b[i] < a[i])
{
b[i + 1] -= 1;
b[i] += 10;
}
result[i] = b[i] - a[i];
}
}
int tmp = lenmax;
while(result[tmp] == 0 && tmp > 0) tmp--;
if(fu) printf("-");
for(int i = tmp; i >= 0; i--) cout << result[i];
return 0;
}
☑so,你学废了吗?
本文章为zovetr小面包有点甜撰写,如有侵权,请及时告知