本文主要是介绍南邮OJ 1079 111…,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
链接:http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=1079
题目:
111…
Total Submit:301 Accepted:86
Description
给定任何不可被2或者5整除的整数n(0 <= n <= 10000)。有一些n的倍数,它们按十进制表示是一个由1组成的序列。那么这种类型的n倍数中最小数有多少位?
Input
每行包含一个数n
Output
输出位数。
注意:输出部分的结尾要求包含一个多余的空行。
Sample Input
3
7
9901
Sample Output
3
6
12
解题思路:
题目要求的是一个数t(t=1111...... && 0 == t % n)的位数,t = (10 * t) + 1;这是计算t的值得公式(从个位开始左移并且加1),每步都对n取余,如果0 == t,说明n可以被t整除,此时的位数就是最小位数。
代码:
#include <cstdio>int main()
{int n;while(~scanf("%I64d", &n)){int t = 0, ans = 0;while(true){t = (10 * t + 1) % n;ans++;if(0 == t) break;}printf("%d\n", ans);}return 0;
}
这篇关于南邮OJ 1079 111…的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!