给定一个数 x(1 \le x < 10^8),让你求出一个数 y(1 \le y < 10^9),令 k=x 与 y 在十进制下拼接的数,使 (x+y)\mid k。
思路
首先,我们令 d 表示 y 的十进制位数。所以 x 与 y 十进制下拼接之后为 10^dx+y。
因为 (x+y)\mid k,所以 10^dx+y\equiv 0(\bmod (x+y))。
因为 y \equiv -x (\bmod(x+y)),所以 (10^d-1)x \equiv 0(\bmod (x+y))。
因此我们只要让 x+y=10^d-1 即可。容易发现,取 d=9 时,因为 x < 10^8,y 的位数一定是 9 位,所以 y < 10^9 且 d=y 的十进制位数。
对于每一组数据输出 10^9-1-x 即可。
代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
cout<<1e9-1-n<<endl;
}
return 0;
}