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\n" , A , K ) ;
else
printf( "-1\n" ) ;
}
}