从低位开始,对非零数进行进位。
其实还是比较好想的,但是在比赛时总是想不到。总是会把简单的问题想复杂,把复杂的问题想简单。
这个题给出的范围从位数上来说还是比较小的,就算是多重循环,也不太可能超时,但是在比赛的时候总是怕超时,就一直不敢写。为了减少时间,还从前往后计算,这样大大增加了实现的难度,导致在比赛时没有做出来。
class Solution {
public:
int getSum(long long n)
{
int sum = 0;
while(n)
{
sum += n % 10;
n /= 10;
}
return sum;
}
long long makeIntegerBeautiful(long long n, int target) {
long long x = n;
while(getSum(x) > target)
{
int i = 0;
// 找到非0位
while(x % 10 == 0)
{
x /= 10;
i++;
}
// 进位
x /= 10;
x++;
while(i >= 0)
{
x *= 10;
i--;
}
}
return x - n;
}
};