2013年1月4日 星期五

[ZJ] d411. 算了好久......


內容 :

某一天,恆恆、衡衡要一決算數的速度,
他們想比一比某一個數字M是否為2的N次方的倍數,
而每次的M都是高達9999位的大數字呀!!!
但他們相信他們的數學能力。
我想說,那嚜大的數字電腦跑就好啦~
於是我也加入了戰局~~
但...............
我不會寫程式呀!!!!!
好心人幫幫我打贏他們兩人吧~~~
我們一共比了10場
輸入說明 :
每行輸入2個正整數M、N,
M代表上述的某數,N代表2的N次
0=<M<10^9999
0<=N<10
輸出說明 :
若M為2的N次的倍數     請輸出      YA!!終於算出M可被2的N次整除了!!
若不是    請輸出     可惡!!算了這麼久M竟然無法被2的N次整除
範例輸入 :
6 216 3
範例輸出 :
可惡!!算了這麼久6竟然無法被2的2次整除YA!!終於算出16可被2的3次整除了!!
提示 :
2^N  =  pow(2,N)
記得加 #include<math.h>

出處 :
愷愷 (管理:kevin830222)

大數除小數,直接模擬硬做就好了

/**********************************************************************************/
/*  Problem: d411 "算了好久......" from 愷愷                                */
/*  Language: C                                                                   */
/*  Result: AC (10ms, 292KB) on ZeroJudge                                         */
/*  Author: morris1028 at 2011-05-31 22:08:39                                     */
/**********************************************************************************/


#include<stdio.h>
main() {
    char S[10001];
    int a, N, s2[10]={1};
    for(a = 1; a < 10;s2[a]=s2[a-1]*2,a++);
    while(scanf("%s %d", S, &N) == 2) {
        int t = S[0]-'0';
        for(a = 1; S[a]; a++) {
            t = t*10 + S[a]-'0';
            t %= s2[N];
        }
        if(t)    printf("可惡!!算了這麼久%s竟然無法被2的%d次整除\n", S, N);
        else    printf("YA!!終於算出%s可被2的%d次整除了!!\n", S, N);
    }
    return 0;
}

沒有留言:

張貼留言