2011-06-01 22:31:56Morris

d411. 算了好久......

http://zerojudge.tw/ShowProblem?problemid=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 2
16 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;
}