http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=537
题意:给你一个k值,现在要你求一个最小的N 值,N每一个数位上的数值a均相等且N为k的倍数,求出满足题意a和位数b;
根据题意,因为,N = k * x , k * x % k == 0;
所以,N % k == 0 ;
又因为N = a * 10 ^ b + a *10 ^ ( b - 1 ) + …… + a * 10 ^ 1 + a * 10 ^ 0 ;
所以,(a * 10 ^ b + a *10 ^ ( b - 1 ) + …… + a * 10 ^ 1 + a * 10 ^ 0 ) % k == 0 ;
假设s[ i ] = N ; 可得 s[ i ] = s[ i - 1 ] * 10 + a ;
因为k的数据只有1000,枚举k值即可;
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<bitset> using namespace std; int main() { int k ; int A , K ; while( ~scanf( "%d" , &k ) ) { int flag = 0 ; for( int i = 1 ; i <= 9 ; ++i ) { int s = 0 ; for( int j = 1 ; j <= k ; ++j ) { s = ( s * 10 + i ) % k ; if( s == 0 ) { A = i ; K = j ; flag = 1 ; break ; } } if( flag ) break ; } if( flag ) printf( "%d %d " , A , K ) ; else printf( "-1 " ) ; } }