题解 | #火星A+B#
火星A+B
https://www.nowcoder.com/practice/46bb070835e548678c78477f1fb0b92e
#include <iostream> #include <vector> #include<deque> using namespace std; void primeN(vector<int>& prime, int n) { vector<bool> isPrime(n, true); for (int i = 2; i < n; i++) { if (isPrime[i]) prime.push_back(i); if (i * i < n) { for (int j = i * i; j < n; j += i) { isPrime[j] = false; } } } } void getNum(vector<int>& num, string s) { int start = 0, end; for (end = 0; end < s.size(); end++) { if (s[end] == ',' ) { string tmp(s.begin() + start, s.begin() + end); start = end + 1; num.push_back(stoi(tmp)); } } num.push_back(stoi(string(s.begin() + start, s.end()))); } int main() { string num1, num2; cin >> num1 >> num2; vector<int>prime; vector<int> nums1; vector<int> nums2; deque<int>res; primeN(prime, 100); getNum(nums1, num1); getNum(nums2, num2); int maxlen = nums1.size() > nums2.size() ? nums1.size() : nums2.size(); while (nums1.size() < maxlen) { nums1.insert(nums1.begin(), 0); } while (nums2.size() < maxlen) { nums2.insert(nums2.begin(), 0); } int carry = 0, index = 0; for (int i = maxlen - 1; i >= 0; i--) { int sum = nums1[i] + nums2[i]; if (carry == 1) { sum++; carry = 0; } if (sum >= prime[index]) { sum -= prime[index]; carry = 1; } res.push_front(sum); index++; } if (carry == 1) { res.push_front(1); } bool flag = true; while(!res.empty()) { if (flag) { cout << res.front(); res.pop_front(); flag = false; continue; } cout << ',' << res.front(); res.pop_front(); } } // 64 位输出请用 printf("%lld")