给出n个大于0小于1000000000的数字,按每个数字之和从大到小的顺序打印出来。

例如,数字1234,每个数字的和是10,小于83,和是11,如果和是相同的,那么比较它们的ASCII码,例如,71小于8,81小于810。

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

#define N 1000

int countN(int num)
{
    int sum = 0;
    while (num)
    {
        sum += num % 10;
        num /= 10;
    }
    return sum;
}

bool cmpASCII(int op1, int op2)
{
    string s1 = to_string(op1);
    string s2 = to_string(op2);
    int n1 = s1.size();
    int n2 = s2.size();
    for (int i = 0; i < n1 && i < n2; i++)
    {
        if (s1[i] < s2[i])
        {
            return false;
        }
        else if (s1[i] > s2[i])
        {
            return true;
        }
    }
    if (n1 < n2)
    {
        return false;
    }
    return true;
}

int main()
{
    vector<int> arr;
    for (int i = 1; i < N; i++)
    {
        arr.push_back(i);
    }

    sort(arr.begin(), arr.end(), [&](int& op1, int& op2){

        return (countN(op1) == countN(op2) && cmpASCII(op1, op2))  || countN(op1) > countN(op2);
    });

    for (auto num : arr)
    {
        cout << num << endl;
    }
    

    return 0;
}