c++将正整数中数字重新排列分别组成最大数和最小数

输入正整数,将正整数中每位数字重新排列,分别组成一个最大数和最小数依次输出,两数间用空格分隔

如下:

img

#include <iostream>
using namespace std;

int main()
{
    int n;
    int a[20];
    int i, j, len=0,t;
    cin >> n;
    //将n的各位数字存入数组
    while (n)
    {
        a[len] = n % 10;
        len++;
        n /= 10;
    }
    //冒泡排序
    for (i = 0; i < len - 1; i++)
    {
        for (j = 0; j < len - 1 - i; j++)
        {
            if (a[j] > a[j + 1]) //升序排列(从小到大)
            {
                t = a[j];
                a[j] = a[j + 1];
                a[j + 1] = t;
            }
        }
    }
    //最大数
    int max = 0;
    for (i = len - 1; i >= 0; i--)
    {
        max = max * 10 + a[i];
    }
    //最小数
    int min = 0;
    for (i = 0; i < len; i++)
    {
        min = min * 10 + a[i];
    }
    cout << max << " " << min;
    return 0;
}

img


你题目的解答代码如下:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main() {
    long long int n,max=0,min=0;
    int a[100] = {0},i,m=0;
    cin >> n;
    while (n>0)
    {
        a[m++] = n%10;
        n /= 10;
    }
    sort(a,a+m);
    for (i = 0; i < m; i++)
    {
        max=max*10+a[m-1-i];
        min=min*10+a[i];
    }
    cout <<max<<" "<<min;
    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

将输入的整数拆分各个位上的数存放数组中。
对数组元素进行降序。
正序输出的就是最大值,逆序输出的就是最小值。