111…
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 452 测试通过 : 130
比赛描述
给定任何不可被2或者5整除的整数n(0 <= n <= 10000)。有一些n的倍数,它们按十进制表示是一个由1组成的序列。那么这种类型的n倍数中最小数有多少位?
输入
每行包含一个数n
输出
输出位数。
注意:输出部分的结尾要求包含一个多余的空行。
样例输入
3
7
9901
样例输出
3
6
12
题目来源
“IBM南邮杯”2009
题目链接:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1079
解题思路:x每多一位1的公式是(x*10)+1,仔细分析会发现,只要 (x%n)% n=0,那么,x%n=0 ,因此每次 x%n 的值赋给x,就可以大大缩小 数字大小。
代码如下:
#include <cstdio>
#include <cstring>
int main(void)
{
int n;
while(scanf("%d",&n)!=EOF)
{
int m=1,ans=1;
while(m%n)
{
m=((m*10)+1)%n;
ans++;
}
printf("%d\n",ans );
}
}