### 分析
1. **问题描述**:
- 给定若干个科学记数法格式的实数,将其转换为普通的十进制格式。
- 如果转换后的数是整数,则不显示小数部分和小数点。
2. **解决方案**:
- 解析输入的科学记数法格式字符串`A.BeD`,其中`A`是整数部分,`B`是小数部分,`D`是指数部分。
- 根据指数`D`,将小数部分`B`移动相应的位置,形成普通的十进制数。
- 如果结果是整数,则不显示小数部分和小数点。
### 伪代码
1. 读取输入的测试数据数量`T`。
2. 对于每组测试数据,解析字符串`A.BeD`。
3. 根据指数`D`,调整小数点的位置,形成普通的十进制数。
4. 输出结果,如果是整数,则不显示小数部分和小数点。
### C++代码
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
using namespace std;
string scientificToDecimal(const string& sci) {
size_t ePos = sci.find('e');
string base = sci.substr(0, ePos);
int exponent = stoi(sci.substr(ePos + 1));
size_t dotPos = base.find('.');
string integerPart = base.substr(0, dotPos);
string fractionalPart = base.substr(dotPos + 1);
if (exponent >= 0) {
if (exponent < fractionalPart.size()) {
integerPart += fractionalPart.substr(0, exponent);
fractionalPart = fractionalPart.substr(exponent);
} else {
integerPart += fractionalPart;
integerPart.append(exponent - fractionalPart.size(), '0');
fractionalPart = "";
}
} else {
if (-exponent < integerPart.size()) {
fractionalPart = integerPart.substr(integerPart.size() + exponent) + fractionalPart;
integerPart = integerPart.substr(0, integerPart.size() + exponent);
} else {
fractionalPart = string(-exponent - integerPart.size(), '0') + integerPart + fractionalPart;
integerPart = "0";
}
}
if (fractionalPart.empty()) {
return integerPart;
} else {
while (!fractionalPart.empty() && fractionalPart.back() == '0') {
fractionalPart.pop_back();
}
return integerPart + (fractionalPart.empty() ? "" : "." + fractionalPart);
}
}
int main() {
int T;
cin >> T;
cin.ignore();
while (T--) {
string sci;
getline(cin, sci);
cout << scientificToDecimal(sci) << endl;
}
return 0;
}