标签:
给出一个范围在[0,1e6]的数n,需要构造一个数m,使得m是n的倍数,m属于[0,1e16]且m包含[0,9]的所有数字
若不存在,输出-1
当n=0时输出-1
当n属于[1,1e6)时
m=(9876543210*1e5+n)-(9876543210*1e5+n)%n
这样,这个数的前10位不会改变,所以保证有[0,9],又减去了模n的余数于是可以被整除,位数正好
当n=1e6是用上述构造方法位数会超,然而只用输出9876543210*1e5就行了,,,
1 #include<bits/stdc++.h> 2 using namespace std; 3 const long long Must=9876543210000000; 4 int main(){ 5 int T; 6 long long n; 7 scanf("%d",&T); 8 while(T--){ 9 scanf("%lld",&n); 10 if(!n)puts("-1"); 11 else printf("%lld\n",(Must+n)-(Must+n)%n); 12 } 13 return 0; 14 }
标签:
原文地址:http://www.cnblogs.com/Ngshily/p/5430375.html