[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倍數的位數。
範例 :
說明
給一個正整數 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++)
- #include <iostream>
- using namespace std;
- int main() {
- // [C_MM49-易] 連續1的倍數
- int k, n, num=1, count = 1;
- cin >> k;
- for(int i = 0;i < k;i++)
- {
- cin >> n;
- for(;(num %= n)!=0;count++)
- {
- num = 10*num+1;
- }
- cout << count << endl;;
- num = 1;
- count = 1;
- }
- return 0;
- }
(Java)
- import java.util.*;
- class Main
- {
- public static void main (String[] args)
- {
- int k, n, num=1, count = 1;
- Scanner sc = new Scanner(System.in);
- k = sc.nextInt();
- for(int i = 0;i < k;i++)
- {
- n = sc.nextInt();
- for(;(num %= n)!=0;count++)
- {
- num = 10*num+1;
- }
- System.out.println(count);
- num = 1;
- count = 1;
- }
- }
- }
請問為何for(;(num %= n)!=0;count++)我寫成for(;(num % n)!=0;count++)輸入比較大的數字程式會當掉?
回覆刪除