例如,数字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;
}