I-numberTime Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1524 Accepted Submission(s): 612
Problem Description
The I-number of x is defined to be an integer y, which satisfied the the conditions below:
1. y>x; 2. the sum of each digit of y(under base 10) is the multiple of 10; 3. among all integers that satisfy the two conditions above, y shouble be the minimum. Given x, you're required to calculate the I-number of x.
Input
An integer T(T≤100) will exist in the first line of input, indicating the number of test cases.
The following T lines describe all the queries, each with a positive integer x. The length of x will not exceed 10 5.
Output
Output the I-number of x for each query.
Sample Input
Sample Output
Source
Recommend
liuyiding
|
=====================================[ 代码 ]=====================================
#include <cstdio>
#include <cstring>
#include <numeric>
using namespace std;
const int kCarryReserve = 1; // 进位预留(只需一位)。
int T;
char buffer[ 100005 ], *x;
int main()
{
while( scanf( "%d", &T ) == 1 ) while( T-- )
{
memset( buffer, '0', kCarryReserve );
scanf( "%s", x = buffer + kCarryReserve );
char* last = x + strlen( x );
while( true )
{
// 递增。
char* p = last - 1;
while( *p == '9' ) { *p-- = '0'; }
++*p;
if( p < x ) { x = p; }
// 求和。
int sum = accumulate( x, last, '0' * ( x - last ) );
if( sum % 10 == 0 ) { break; }
}
printf( "%s\n", x );
}
return 0;
}