2010/01/28

p017 Ones




紿任一個整數 n(1 <= n <= 9999),且 n 不可被 2 或 5 除盡。n的某一個倍數以十進位的表示法將是一連串的1,請問這一連串的1最少是幾位數?
例如:
n=3,3*37=111,所以答案是3位數。
n=7,7*15873=111111,所以答案是6位數。


解法:
都是大於等於1的數字,所以一定有一個連續的1而且只有一位數就是1本身。
所以我們先暫定我們要求的數字為tmp = 1,且位數digits = 1
每次都將tmp*10 + 1的目的是我們希望最後一位數都會是1,這樣一來才能產生連續1的數字
而在乘10的同時代表說我們也要digits++,因為一定是再更高位的連續1數字了!
如果終於能夠整除了,就能確定說tmp就是我們要找的數字了。

/**
 * Time(ZeroJudge):78ms
 * Date: 2010-1-28
 * 
 * @author Kurorido
 */

import java.util.Scanner;

public class JAVA {

 public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  
  int n, tmp, digits;
  
  while(sc.hasNext()) {
   
   n = sc.nextInt();
   tmp = 1;
   digits = 1;
   
   while(true) {
    if(tmp % n == 0)
     break;
    tmp = (tmp * 10 + 1) % n;
    digits++;
   }
   
   System.out.println(digits);
  }
 }
}

參考網站:
http://groups.google.com.tw/group/pcshic/web/uva-10127-ones
http://hi.baidu.com/ly01kongjian/blog/item/d21e666f4734f5f1421694a8.html

No comments:

Post a Comment