首页 > 其他 > 详细

[itint5]两数积全为1

时间:2014-01-21 17:11:11      阅读:350      评论:0      收藏:0      [点我收藏+]

http://www.itint5.com/oj/#18

这一题,首先如果直接去算的话,很容易就超出int或者long的表示范围了。那么要利用%的性质,(num * 10 + 1) % a = 10 * (num % a) + 1 % a。除了a为1的情况,都是10 * (num % a) + 1。然后计算的时候,先去掉是2和5的倍数的情况。也可以直接做,如果余数出现过,就不用继续了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int findMinAllOne(int a) {
    if (a % 2 == 0 || a % 5 == 0) return -1;
    if (a == 1) return 1;
    int num = 1;
    int ans = 1;
    while (true) {
        if (num % a == 0) {
            return ans;
        } else {
            num %= a;
            num = num * 10 + 1;
            ans++;
        }
    }
}

  

[itint5]两数积全为1

原文:http://www.cnblogs.com/lautsie/p/3527473.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!