【戰錘40k裝備介紹】真名魔典——記載著惡魔重大弱點的書卷
阿新 • • 發佈:2022-03-31
題目描述:
高精度減法
輸入格式:
兩個整數a,b(第二個可能比第一個大)。
輸出格式:
結果(是負數要輸出負號)。
輸入輸出樣例
輸入#1 輸出#1
2 1
1
說明/提示
20%資料a,b在long long範圍內;
100%資料0<a,b<1010086。
題目需要注意的地方:
資料之間的大小問題
if ((num1.size() < num2.size()) || ((num1.size() == num2.size()) && (num1 < num2)))//比較大小 { len = num2.size(); swap(num1, num2);//交換兩數 flag = 0;//標記 }
做減法時借位
c[i] += a[i] - b[i]; if (c[i] < 0) { c[i + 1] --; c[i] += 10; }
程式碼如下:
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int main() { int flag = 1; string num1, num2; cin >> num1 >> num2; int a[1050] = { 0 }, b[1050] = { 0 }, c[1050] = { 0 }; int len; if ((num1.size() < num2.size()) || ((num1.size() == num2.size()) && (num1 < num2)))//比較大小 { len= num2.size(); swap(num1, num2);//交換兩數 flag = 0;//標記 } else len = num1.size(); //倒序儲存 for (int i = 0;i < num1.size();i++)//將字串轉換為數字,並存儲到陣列中 { a[i] = num1[num1.size() - i - 1] - '0'; } for (int i = 0;i < num2.size();i++) { b[i] = num2[num2.size()-i-1] - '0'; } for (int i = 0;i < len;i++)//借位 { c[i] += a[i] - b[i]; if (c[i] < 0) { c[i + 1] --; c[i] += 10; } } for (int i = len - 1;i >= 0;i--)//注意倒序輸出 { while (c[len-1] == 0&&i>0)//防止前面輸出0 i--; if (flag == 0) { cout << '-'; flag = 1; } cout <<c[i]; } }