#8781: 溢位


wemee (阿勇)

學校 : 國立北港高級中學
編號 : 4621
來源 : [220.135.3.103]
最後登入時間 :
2023-09-27 11:01:07
c061. 00530 - Binomial Showdown -- UVa530 | From: [60.250.139.121] | 發表日期 : 2014-04-24 15:41

直接用double就好了
別管他題目說最後答案是int
計算過程用int一定溢位
 
#include <stdio.h>

int count(double n, double m){
    double i, s=n;
    for(i=(n-1);i>m;i--)
        s *= i;
    
    for(i=(n-m);i>1;i--)
        s /= i;
    
    return (int)s;
}

int main(){
    int n, m, d;
    while(scanf("%d %d", &n, &m) != EOF){
        if(n==0)
            break;
        if(m==0 || n==m){
            printf("1\n");
            continue;
        }
        if(m==1){
            printf("%d\n", n);
            continue;
        }
            
        d = n-m;
        if(m>d)
            printf("%d\n", count((double)n, (double)m));
        else
            printf("%d\n", count((double)n, (double)d));
    }
    return 0;
}
 
ZeroJudge Forum