Given a positive integer x, let S(x) denotes the sum of all x's digits. Two integers x and y are friend numbers if S(x)=S(y). Here comes the problem: Given a positive integer x, of course it has a lot of friend numbers, find the smallest one which is greater than x,please.
Input
There are multiple test cases. The first line of input is an integer T (0<T<230) indicating the number of test cases. Then T test cases follow. Each case is an integer x (0<x<=101000).
Output
For each test case, output the result integer in a single line.
Sample Input
3 12 19 222
Sample Output
21 28 231
Note: No input data start with digit 0 and you should not output a number starts with 0.
Author: CAO, Peng
Source: ZOJ Monthly, May 2010
刚开始的时候想错了,以为直接加9就可以了,后来想想不对,仔细想想才明白,从后往前找,找到第一个不为0的减1,再继续往前找,找到第一个不为9的加1(如果找到最前面也没找到一个不为9的,就先输出个1),然后对此位置之后的串排序输出;
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
int t,len,i;
char s[1010];
scanf("%d",&t);
while(t--){
scanf("%s",s);
//if( s[0] == '0' ) continue;
len = strlen(s);//printf("%d\n",len);
for( i = len-1 ; i >= 0 ; --i ){
if( s[i] != '0' ){
s[i]--;
break;
}
}
for( --i ; i >= 0 ; --i ){
if( s[i] != '9' ){
s[i]++;
break;
}
}
if( i < 0 ) printf("1");
sort(s+i+1,s+len);
for( i = 0 ; i < len ; ++i )
printf("%c",s[i]);
printf("\n");
}
return 0;
}