import
java.util.*;
public
class
Solution
{
static
long
toInt(ArrayList<Integer> digits)
{
long
n =
0
;
for
(
int
i = digits.size() -
1
; i >=
0
; i--)
n = n *
10
+ digits.get(i);
return
n;
}
static
long
closest_number(
long
N,
int
D)
{
ArrayList<Integer> digits =
new
ArrayList<>();
long
temp_num = N;
int
cur_sum =
0
, temp_cur_sum, index;
while
(temp_num >
0
) {
int
digit = (
int
)(temp_num %
10
);
digits.add(digit);
cur_sum += digit;
temp_num /=
10
;
}
temp_cur_sum = cur_sum;
if
(D == cur_sum)
return
N;
else
if
(D < cur_sum) {
ArrayList<Integer> n1 =
new
ArrayList<>(digits);
for
(index =
0
; cur_sum - D >= n1.get(index);
index++) {
cur_sum -= n1.get(index);
n1.set(index,
0
);
}
n1.set(index, n1.get(index) - (cur_sum - D));
ArrayList<Integer> n2 =
new
ArrayList<>(digits);
cur_sum = temp_cur_sum;
for
(index =
0
; cur_sum >= D; index++) {
cur_sum -= n2.get(index);
n2.set(index,
0
);
}
if
(index < n2.size())
n2.set(index, n2.get(index) +
1
);
else
n2.add(
1
);
++cur_sum;
for
(
int
i = index;
i < n2.size() && n2.get(i) >
9
; i++) {
n2.set(i,
0
);
if
(i == n2.size() -
1
)
n2.add(
1
);
else
n2.set(i +
1
, n2.get(i +
1
) +
1
);
cur_sum -=
9
;
}
for
(index =
0
;
D - cur_sum + n2.get(index) >=
10
;
index++) {
cur_sum += (
9
- n2.get(index));
n2.set(index,
9
);
}
n2.set(index, n2.get(index + D - cur_sum));
if
(N - toInt(n1) <= toInt(n2) - N)
return
toInt(n1);
else
return
toInt(n2);
}
else
{
ArrayList<Integer> n1 =
new
ArrayList<>(digits);
for
(index =
0
;
D - cur_sum + n1.get(index) >=
10
;
index++) {
if
(index == n1.size())
n1.add(
0
);
cur_sum += (
9
- n1.get(index));
n1.set(index,
9
);
}
if
(index == n1.size())
n1.add(
0
);
n1.set(index, n1.get(index) + D - cur_sum);
ArrayList<Integer> n2 =
new
ArrayList<>(digits);
cur_sum = temp_cur_sum;
for
(index =
0
;
cur_sum < D && index < n2.size();
index++) {
cur_sum += (
9
- n2.get(index));
n2.set(index,
9
);
}
n2.set(index, n2.get(index) -
1
);
--cur_sum;
if
(cur_sum < D)
n2.clear();
else
{
for
(
int
i = index;
i < n2.size() && n2.get(i) <
0
; i++) {
n2.set(i,
9
);
if
(i == n2.size() -
1
)
n2.remove(n2.size() -
1
);
else
n2.set(i +
1
, n2.get(i +
1
) -
1
);
cur_sum +=
9
;
}
for
(index =
0
;
cur_sum - D >= n2.get(index);
index++) {
cur_sum -= n2.get(index);
n2.set(index,
0
);
}
n2.set(index,
9
- (cur_sum - D));
}
if
(n2.size() >
0
&& N - toInt(n2) <= toInt(n1) - N)
return
toInt(n2);
else
return
toInt(n1);
}
}
public
static
void
main(String[] args)
{
long
N = 87220000221835856L;
int
D =
102
;
System.out.println(closest_number(N, D));
}
}