小猴对一个数的数位之和很感兴趣,今天他要按照数位之和给序列排序。当两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,将数值小的排在前面,保证所有整数互不相同。 例如,1001 排在 99 前面,因为 1001 的数位之和是 2而 99的数位之和是18又如,2 排在 101 前面,因为它们的数位之和相同,而 2小于 101。 请你帮助小猴完成这个任务。
#include <iostream>
#include <algorithm>
using namespace std;
int a[10000000];
int sumnum(long long n)
{
int sum=0;
while(n>0)
{
sum+=n%10;
n/=10;
}
return sum;
}
bool cmp(long long x,long long y)
{
if (sumnum(x)!=sumnum(y))return sumnum(x)<sumnum(y);
else return x<y;
}
int main()
{
int n;
cin>>n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
sort(a + 1, a + n + 1,cmp);
for (int i = 1; i <= n; i++)
{
cout << a[i] <<" ";
}
return 0;
}