题解 | #火星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")

全部评论

相关推荐

2024-12-26 13:00
太原理工大学 Java
会飞的猿:简历没啥大问题啊,感觉是缺少了实习经历。多投投先找个中小厂过渡一下吧
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务