pta题库答案c++语言 重庆大学
时间: 2024-12-29 07:26:40 浏览: 30
### 关于重庆大学PTA题库中的C++题目解答
对于给定的裁判测试程序样例,其中涉及到`BigInt`类的操作[^1]。为了实现两个大整数相加的功能,可以定义一个简单的`BigInt`类来处理大整数值的输入、输出以及加法运算。
```cpp
#include <iostream>
#include <string>
using namespace std;
class BigInt {
public:
string num;
// 构造函数用于初始化对象
BigInt() : num("") {}
// 重载>>操作符以便能够读取大整数
friend istream& operator>>(istream &in, BigInt &bigInt) {
in >> bigInt.num;
return in;
}
// 重载<<操作符以便能够打印大整数
friend ostream& operator<<(ostream &out, const BigInt &bigInt) {
out << bigInt.num;
return out;
}
// 实现大整数之间的加法逻辑
BigInt operator+(const BigInt &other) const {
string result;
int carry = 0;
auto it1 = this->num.rbegin();
auto it2 = other.num.rbegin();
while (it1 != this->num.rend() || it2 != other.num.rend() || carry > 0){
int sum = carry + (it1 != this->num.rend()? *it1-'0' : 0) +
(it2 != other.num.rend()? *it2-'0' : 0);
carry = sum / 10;
char digit = '0' + sum % 10;
result.push_back(digit);
if(it1 != this->num.rend()) ++it1;
if(it2 != other.num.rend()) ++it2;
}
reverse(result.begin(), result.end());
return {result};
}
};
int main(){
BigInt a, b, c;
cin >> a >> b;
c = a + b;
cout << a << "+" << b << "=" << c << endl;
return 0;
}
```
上述代码实现了基本的大整数加法功能,并按照指定格式进行了输出。
针对另一个例子,在一行中判断并输出三个球里唯一不同的那一个[^2]:
```cpp
#include <iostream>
using namespace std;
int main(){
int a, b, c;
cin >> a >> b >> c;
if(a == b && a != c) cout << "C";
else if(b == c && b != a) cout << "A";
else if(a == c && a != b) cout << "B";
return 0;
}
```
这段代码通过比较三者之间两两的关系来决定哪个字母代表的是与众不同的球。
最后关于字符串翻转的问题[^4],这里提供了一个简单的方法来进行单词级别的反转:
```cpp
#include <iostream>
#include <sstream>
#include <algorithm>
using namespace std;
int main() {
string line;
getline(cin, line); // 获取整个行作为输入
stringstream ss(line);
string word;
string reversedLine;
while(ss >> word) {
reverse(word.begin(), word.end()); // 反转单个词
reversedLine += word + " "; // 添加到最终结果后面加上空格
}
cout << reversedLine; // 打印结果
return 0;
}
```
此段代码会逐个读入单词并对它们执行字符级逆序排列,之后再组合成新的句子形式输出。
阅读全文