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

全部评论

相关推荐

Lorn的意义:1.你这根本就不会写简历呀,了解太少了 2.你这些项目经历感觉真的没啥亮点啊,描述的不行,重写书写一下让人看到核心,就继续海投 注意七八月份ofer还是比较多的,越往后机会越少,抓住时机,抓紧检查疏漏,加油查看图片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务