MiOJ 3. 大数相减(字符串减法)
生活随笔
收集整理的這篇文章主要介紹了
MiOJ 3. 大数相减(字符串减法)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 題目
描述
兩個長度超出常規整形變量上限的大數相減,請避免使用各語言內置大數處理庫,如 Java.math.BigInteger 等。
輸入
有 N 行測試數據,每一行有兩個代表整數的字符串 a 和 b,長度超過百位。規定 a>=b,a, b > 0。 測試結果可以用 linux 小工具 bc進行測試是否正確。
輸出
返回表示結果整數的字符串。
輸入樣例
1231231237812739878951331231231237812739878951331231231237812739878951331231231237812739878951331231231237812739878951331231231237812739870-89513312312312378127398789513312312312378127398789513312312312378127398789513 1231231237812739878951331231231237812739878951331231231237812739878951331230000000000000000000000001-331231231237812739878951331231231輸出樣例
1231231237812739878951331231231237812739878951331231231237812650365639018918853110413950365639018918853110413950365639018918853110413950357 12312312378127398789513312312312378127398789513312312312378127398786200999987621872601210486687687702. 解題
#include <bits/stdc++.h>using namespace std; void sub(string&a, string&b) {int i = a.size()-1, j = b.size()-1, carry = 0, sum;while(i >=0 || j >=0 || carry!=0){sum = (i>=0 ? a[i]-'0' : 0) - (j>=0 ? b[j]-'0' : 0) - carry;if(sum < 0){carry = 1;sum += 10;}elsecarry = 0;a[i] = sum%10 + '0';i--,j--;} } int main() {string a, b;int i;while(cin>>a){i = a.find("-");b = a.substr(i+1);a = a.substr(0,i);sub(a,b);if(a.front()=='0')cout << a.substr(1) << endl;elsecout << a << endl;}return 0; }<1ms 運行時間打敗了 92.99% 的 C++ 玩家!
總結
以上是生活随笔為你收集整理的MiOJ 3. 大数相减(字符串减法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员面试金典 - 面试题 16.11.
- 下一篇: LeetCode 51. N皇后 / 5