2017年10月25日 星期三

[C_MM49-易] 連續1的倍數(C++, Java)

[C_MM49-易] 連續1的倍數

問題描述 :
給一個正整數 n (1 < n ≤ 10000且n不為2或5的倍數),求n之最小「連續1的倍數」。所謂的「連續1的倍數」是指該倍數的所有位數都是1。例如111就是3的最小連續1的倍數。輸出該倍數中1的個數。

輸入說明 :
程式的輸入包含兩行數字,第一行包含一個正整數k,1 ≤ k ≤ 10,代表第二行有k個測試資料n1, n2, ..., nk,1 < ni ≤ 10000,而此k個正整數間以空格隔開。
輸出說明 :
輸出k列答案,針對每一個測試資料ni,輸出ni的最小連續1倍數的位數。
範例 :

Sample Input:Sample Output:
3
7 11 9901
6
2
12
說明
計算要有幾個1的數,才會被n整除
1 % 7 != 0             ->count = 1
11 % 7 != 0            ->count = 2
111 % 7 != 0           ->count = 3
1111 % 7 != 0           ->count = 4
11111 % 7 != 0           ->count = 5
111111 % 7  = 0           ->count = 6
所以輸出是6

(C++)

  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. int main() {  
  5.     // [C_MM49-易] 連續1的倍數  
  6.     int k, n, num=1, count = 1;    
  7.      cin >> k;    
  8.     for(int i = 0;i < k;i++)    
  9.     {    
  10.         cin >> n;    
  11.         for(;(num %= n)!=0;count++)    
  12.         {    
  13.             num = 10*num+1;    
  14.         }    
  15.         cout << count << endl;;    
  16.           num = 1;    
  17.           count = 1;    
  18.      }    
  19.     return 0;  
  20. }  

(Java)

  1. import java.util.*;  
  2.   
  3. class Main  
  4. {  
  5.     public static void main (String[] args)   
  6.     {  
  7.         int k, n, num=1, count = 1;  
  8.         Scanner sc = new Scanner(System.in);  
  9.         k = sc.nextInt();  
  10.         for(int i = 0;i < k;i++)  
  11.         {  
  12.             n = sc.nextInt();  
  13.             for(;(num %= n)!=0;count++)  
  14.             {  
  15.                 num = 10*num+1;  
  16.             }  
  17.             System.out.println(count);  
  18.             num = 1;  
  19.             count = 1;  
  20.         }  
  21.     }  
  22. }  

1 則留言:

  1. 請問為何for(;(num %= n)!=0;count++)我寫成for(;(num % n)!=0;count++)輸入比較大的數字程式會當掉?

    回覆刪除