fork download
  1. #include <bits/stdc++.h>
  2. #define ll long long
  3.  
  4. using namespace std;
  5.  
  6. string add(string a, string b) {
  7. // cân bằng độ dài 2 xâu để dễ xử lí
  8. reverse(a.begin(), a.end());
  9. reverse(b.begin(), b.end());
  10. while (a.size() < b.size()) a += '0';
  11. while (b.size() < a.size()) b += '0';
  12.  
  13. int r = 0; // số dư
  14. string ans = ""; // kết quả
  15. for (int i = 0; i < a.size(); i++) {
  16. int d = (a[i] - '0') + (b[i] - '0') + r; // tổng từng cặp chữ số từ phải sang trái và thêm nhớ
  17. r = d / 10; // nhớ bằng kết quả hàng trước chia 10.
  18. ans += (char)(d % 10 + '0'); // thêm số vừa tính được vào kết quả
  19. }
  20.  
  21. if (r) ans += '1'; // nếu còn dư thì thêm vào
  22. reverse(ans.begin(), ans.end()); // đưa kết quả về đúng thứ tự
  23.  
  24. return ans; // trả về kết quả
  25. }
  26.  
  27. signed main() {
  28. ios_base::sync_with_stdio(0);
  29. cin.tie(0); cout.tie(0);
  30.  
  31. string a, b; cin >> a >> b; // nhập dữ liệu
  32.  
  33. // kiểm tra số âm
  34. int plus = 1, pos = 1;
  35. if (a[0] == '-' || a == "0") pos &= 0, plus ^= 1, a.erase(0, 1);
  36. if (b[0] == '-' || b == "0") pos &= 0, plus ^= 1, b.erase(0, 1);
  37.  
  38. if (!plus) cout << "use subtraction" << '\n'; // nếu 2 số trái dấu thì dùng phép trừ
  39.  
  40. // xuất dữ liệu
  41. else if (!pos) cout << '-' << add(a, b) << '\n';
  42. else cout << add(a, b) << '\n';
  43. return 0;
  44. }
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout