Description | ||
题目描述 求由最小的一个N,N个数码1组成的数能被M整除? 比如M=3时,111能被3整除。M=2时,则不存在这样的N。 输入 第一行是一个整数K(K≤1,000),表示样例的个数。 以后每行一个整数M(1≤M≤1,000,000) 输出 每行输出一个样例的结果,如果不存在这样的N,输出0。 样例输入 5 1 2 3 4 999989 样例输出 1 0 3 0 473670 |
思路分析,我们要输出多少位的1组成的数能被m整除,也就是说N位1%m,所以说当N位1%m==0时,我们就输出这个N,从输入和输出最后一个看出,这道题不能直接先求和再求余数,必须有所处理,因为涉及循环,就必须找到递推关系。这就要用到数论里的知识了,即模运算的法则。例如111先对i=0的情况进行分析,i=0,1%3==1,i=1,11%3 = (1*10+1)%3==(1%3*10+1)%3;
i=2,111%3 = (11%3*10+1)%3,其中11%3就是i=1时,由此就可以找到递推关系,n= n%m;
#include<iostream>
#include <stdio.h>
using namespace::std;
int main()
{
int k;
cin >> k;
while (k--)
{
int m;
cin >> m;
int count = 0, i, n = 1;
for (i = 0; i < m; i++)
{
n = n % m;//只处理余数
count = i+1;
if (n == 0)
{
break;
}
else
{
n = n * 10 + 1;
}
}
if (n == 0)
{
cout << count << endl;
}
else
{
cout << "0" << endl;
}
}
}