输入一个6位正整数,求出该数各位数字组成的最大数,例如输入358691,各位数字构成的最大数是986531. (提示:将整数的各位数字分解到一维数组中,再将数组中的元素按降序排序,最后组合得到最大数) c++
时间: 2024-11-03 11:17:13 浏览: 25
c代码-10.键盘输入一个正整数s,从低位开始取出s中奇数位上的数作为高位,依次构成一个新数输出。例如,输入"54321",输出"135"。
5星 · 资源好评率100%
在C++中,你可以通过以下几个步骤来解决这个问题:
1. **读取输入**:首先,创建一个`cin`流来接收用户输入的六位正整数。
```cpp
#include <iostream>
using namespace std;
int main() {
int num;
cout << "请输入一个6位正整数: ";
cin >> num;
}
```
2. **获取每一位数字**:然后,你需要将这个数转换成一个字符串,以便遍历每个字符并提取每一位。
```cpp
string str = to_string(num);
```
3. **转换为数组**:将字符串中的字符转换为整型数组,并存储其对应的数值。这里我们假设数组大小为6,因为是一个六位数。
```cpp
int digits[6];
for (int i = 0; i < 6; ++i) {
digits[i] = str[i] - '0'; // 将字符转为整数,减去ASCII码'0'
}
```
4. **排序数组**:对数组进行降序排序,可以使用`std::sort`函数结合自定义比较函数。
```cpp
bool compare(int a, int b) { return a > b; }
sort(digits, digits + 6, compare);
```
5. **组合为最大数**:从数组的最高位开始,依次取出元素并转换回字符串形式,组成最大的六位数。
```cpp
string result;
for (int i = 5; i >= 0; --i) {
result += static_cast<char>(digits[i] + '0');
}
// 输出结果
cout << "各位数字构成的最大数是: " << result << endl;
```
完整代码如下:
```cpp
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main() {
int num;
cout << "请输入一个6位正整数: ";
cin >> num;
string str = to_string(num);
int digits[6];
for (int i = 0; i < 6; ++i) {
digits[i] = str[i] - '0';
}
bool compare(int a, int b) { return a > b; }
sort(digits, digits + 6, compare);
string result;
for (int i = 5; i >= 0; --i) {
result += static_cast<char>(digits[i] + '0');
}
cout << "各位数字构成的最大数是: " << result << endl;
return 0;
}
```
阅读全文