我的PAT-BASIC代码仓:https://github.com/617076674/PAT-BASIC

原题链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805263297527808

题目描述:

PAT-BASIC1074——宇宙无敌加法器

知识点:进制转换

思路:实时考虑进位的影响

注意点:

即使遍历完了两个字符串input2和input3,只要进位符号flag有值,就需要继续计算

再进一步,即使遍历完了字符串input1,只要进位符号flag有值,就要继续计算,只不过这时当作10进制计算

时间复杂度是O(20)。空间复杂度是O(1)。

C++代码:

#include<iostream>
#include<string>
#include<algorithm>

using namespace std;

string reverseString(string s);

int main() {
	string input1;
	string input2;
	string input3;

	getline(cin, input1);
	getline(cin, input2);
	getline(cin, input3);

	string reverseInput1 = reverseString(input1);
	string reverseInput2 = reverseString(input2);
	string reverseInput3 = reverseString(input3);

	int index = 0;
	int flag = 0;
	string result = "";
	while(true) {
		if(index >= reverseInput2.length() && index >= reverseInput3.length()) {
			break;
		} else if(index < reverseInput2.length() && index >= reverseInput3.length()) {
			int sum = reverseInput2[index] + flag - '0';
			int system = reverseInput1[index] - '0';
			if(system == 0) {
				system = 10;
			}
			if(sum >= system) {
				flag = sum / system;
				int output = sum - system * flag;
				char outputChar = '0' + output;
				result = outputChar + result;
			} else {
				flag = 0;
				int output = sum;
				char outputChar = '0' + output;
				result = outputChar + result;
			}
		} else if(index >= reverseInput2.length() && index < reverseInput3.length()) {
			int sum = reverseInput3[index] + flag - '0';
			int system = reverseInput1[index] - '0';
			if(system == 0) {
				system = 10;
			}
			if(sum >= system) {
				flag = sum / system;
				int output = sum - system * flag;
				char outputChar = '0' + output;
				result = outputChar + result;
			} else {
				flag = 0;
				int output = sum;
				char outputChar = '0' + output;
				result = outputChar + result;
			}
		} else if(index < reverseInput2.length() && index < reverseInput3.length()) {
			int sum = reverseInput3[index] + flag - '0' + reverseInput2[index] - '0';
			int system = reverseInput1[index] - '0';
			if(system == 0) {
				system = 10;
			}
			if(sum >= system) {
				flag = sum / system;
				int output = sum - system * flag;
				char outputChar = '0' + output;
				result = outputChar + result;
			} else {
				flag = 0;
				int output = sum;
				char outputChar = '0' + output;
				result = outputChar + result;
			}
		}
		index++;
	}
	while(flag != 0 && index < reverseInput1.length()) {
		int sum = flag;
		int system = reverseInput1[index] - '0';
		if(system == 0) {
			system = 10;
		}
		if(sum >= system) {
			flag = sum / system;
			int output = sum - system * flag;
			char outputChar = '0' + output;
			result = outputChar + result;
		} else {
			flag = 0;
			int output = sum;
			char outputChar = '0' + output;
			result = outputChar + result;
		}
	}
	while(flag != 0){
		int sum = flag;
		int system = 10;
		if(sum >= system) {
			flag = sum / system;
			int output = sum - system * flag;
			char outputChar = '0' + output;
			result = outputChar + result;
		} else {
			flag = 0;
			int output = sum;
			char outputChar = '0' + output;
			result = outputChar + result;
		}
	}

	int i = 0;
	while(result[i] == '0'){
		i++;
		if(i == result.length()){
			cout << 0 << endl;
			return 0;
		}
	}
	for(int j = i; j < result.length(); j++){
		cout << result[j];
	}

	return 0;
}

string reverseString(string s) {
	string result = "";
	for(int i = s.length() - 1; i >= 0; i--) {
		result += s[i];
	}
	return result;
}

C++解题报告:

PAT-BASIC1074——宇宙无敌加法器

 

相关文章:

  • 2022-12-23
  • 2021-12-15
  • 2021-08-29
  • 2021-07-07
  • 2021-09-07
  • 2022-01-02
猜你喜欢
  • 2021-11-01
  • 2022-12-23
  • 2021-10-18
  • 2022-12-23
  • 2022-12-23
  • 2021-06-21
  • 2021-05-28
相关资源
相似解决方案