第一题:T1最近的数字
标签:数学
题意:给定两个正整数
n
n
n与
d
d
d,请找到所有最接近
n
n
n且是
d
d
d的倍数的整数。如果有多个数字满足要求,从小到大输出。数据范围:
1
≤
n
,
d
≤
1
,
000
,
000
,
000
1≤n,d≤1,000,000,000
1≤n,d≤1,000,000,000
题解:通过
(
n
/
d
)
∗
d
(n/d)*d
(n/d)∗d得到小于等于
n
n
n,最接近
n
n
n的数(且是
d
d
d的倍数),通过
(
n
/
d
+
1
)
∗
d
(n/d+1)*d
(n/d+1)∗d得到大于
n
n
n,最接近
n
n
n的数(且是
d
d
d的倍数)。两者比较一下,按题目要求输出即可。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ll n, d;
cin >> n >> d;
ll a = (n / d) * d; // 小于等于n最接近n的数
ll b = (n / d + 1) * d; // 大于n最接近n的数
if (abs(a - n) < abs(b - n)) cout << a;
else if (abs(a - n) > abs(b - n)) cout << b;
else cout << a << endl << b;
return 0;
}