一、链接
Repeat One
二、题目
题目描述求由最小的一个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可以作为这个除数的最小的被除数,如果没有符合条件的,就输出0
四、代码
c++代码
#include<iostream>using namespace std;int main()
{int t;scanf("%d",&t);while(t--){int m,i=1,k=1;bool flag=false;scanf("%d",&m);for(;i<=m;i++){k%=m;if(k==0){flag=true;break;}k=k*10+1;}if(flag) printf("%d\n",i);else printf("0\n");}return 0;
}
c语言代码
#include<stdio.h>
#include<stdbool.h>int main()
{int t;scanf("%d",&t);while(t--){int m,i=1,k=1;bool flag=false;scanf("%d",&m);for(;i<=m;i++){k%=m;if(k==0){flag=true;break;}k=k*10+1;}if(flag) printf("%d\n",i);else printf("0\n");}return 0;
}
五、总结
1.c语言使用布尔变量还需要调用stdbool.h头文件,有点无奈
2.计算之后再取模和取模之后再计算的计算结果是一样的,先取模可以让算法不超时,所以这里先进行取模,再进行计算,或者说是一边取模一边计算
3.类似一边取模一边计算的还有这道题目:湘大oj1088 N!:求阶乘 数据太大怎么处理 常规的递归求阶乘
4. 取模可以保证所有数据都在0~m-1范围内
5.对于部分代码,我们直接找一个具体的例子,抽象为一般情况,就可以写出代码,比如说,11怎么变成111,就是用这一行代码
k=k*10+1;
六、精美图片