我的PAT-BASIC代码仓:https://github.com/617076674/PAT-BASIC
原题链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805263297527808
题目描述:
知识点:进制转换
思路:实时考虑进位的影响
注意点:
即使遍历完了两个字符串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++解题报告: