使用c++给出程序代码 给定一个数,请将该数各个位上数字反转得到一个新数。 这次与 NOIp2011 普及组第一题不同的是:这个数可以是小数,分数,百分数,整数。 整数反转是将所有数位对调。 小数反转是把整数部分的数反转,再将小数部分的数反转,不交换整数部分与小数部分。 分数反转是把分母的数反转,再把分子的数反转,不交换分子与分母。 百分数的分子一定是整数,百分数只改变数字部分。 输入格式 一个实数 ss 输出格式 一个实数,即 ss 的反转数
时间: 2024-02-11 20:05:18 浏览: 36
好的,下面是一个参考代码,仅供参考:
```c++
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
double num;
cin >> num;
// 将实数转换为字符串
string s = to_string(num);
// 判断实数的类型
if (s.find('.') != string::npos) // 小数
{
// 分割整数部分和小数部分
int pos = s.find('.');
string int_part = s.substr(0, pos);
string dec_part = s.substr(pos + 1);
// 翻转整数部分和小数部分
reverse(int_part.begin(), int_part.end());
reverse(dec_part.begin(), dec_part.end());
// 合并整数部分和小数部分
s = int_part + "." + dec_part;
}
else if (s.find('/') != string::npos) // 分数
{
// 分割分子和分母
int pos = s.find('/');
string numerator = s.substr(0, pos);
string denominator = s.substr(pos + 1);
// 翻转分子和分母
reverse(numerator.begin(), numerator.end());
reverse(denominator.begin(), denominator.end());
// 合并分子和分母
s = numerator + "/" + denominator;
}
else if (s.find('%') != string::npos) // 百分数
{
// 提取百分数的数字部分
s.erase(s.find('%'));
// 翻转数字部分
reverse(s.begin(), s.end());
// 添加百分号
s += "%";
}
else // 整数
{
// 翻转整数
reverse(s.begin(), s.end());
}
// 将翻转后的字符串转换为实数并输出
double res = stod(s);
cout << res << endl;
return 0;
}
```
这个程序首先将输入的实数转换为字符串,然后根据实数的类型进行不同的处理。对于小数和分数,我们使用 `find` 函数查找小数点和分数线的位置,然后使用 `substr` 函数分割出整数部分和小数部分(或者分子和分母),对它们分别进行翻转,最后再将它们合并起来。对于百分数,我们先使用 `erase` 函数去掉百分号,然后对数字部分进行翻转,最后再添加上百分号。对于整数,我们直接将整个字符串翻转。最后,我们将翻转后的字符串转换为实数并输出。
希望这个代码能够帮助到你,如果还有疑问可以再问我。