#10097: 有個疑問 測資W21


zeus0829 (嘉西莫多)

學校 : 國立高雄應用科技大學
編號 : 37438
來源 : [114.40.201.213]
最後登入時間 :
2016-11-17 08:43:19
d212. 東東爬階梯 | From: [114.40.197.207] | 發表日期 : 2015-07-30 21:34

以下是我的code

我很納悶  為何我的程式在44以前 都是正確的  可是在45的時候卻錯誤了

請大家指點指點  謝謝

#include <iostream> //    b432
#include <cmath>
using namespace std ;

unsigned long long int C( int a , int b ) ;
unsigned long long int P( int a ) ;

int main(int argc, char** argv) {
    
    unsigned long long int n ;
    while ( cin >> n ){
        unsigned long long int sum = 0 ;
        printf("正解 = %.0lf   ",sqrt(5)/5*(pow((1+sqrt(5))/2,n+1)-pow((1-sqrt(5))/2,n+1)));
        
        if ( n % 2 == 0 ){
            for ( int i = 1 ; i < n/2 ; i++ ){
                sum += C(n-i,i) ;
            }
            printf("\t我的回答 = %lld\n",2+sum) ;
        }else{
            for ( int i = 1 ; i <= n/2 ; i++ ) {
                sum += C(n-i,i) ;
            }
            printf("\t我的回答 = %lld\n",1+sum) ;
        }
    }
}

unsigned long long int C( int a , int b ) {
    int c = a - b ;
    unsigned long long int sum = 1 ;
    if ( b > c ) swap(b,c) ;
    for ( int i = 1 ; i <= b ; i++ )
        sum *= c+i ;
    return sum / P(b) ;
}

unsigned long long int P( int a ){
    unsigned long long int sum = 1 ;
    for ( int i = 2 ; i <= a ; i++ ) sum *= i ;
    return sum ;
}

 
#10098: Re:有個疑問 測資W21


kkmomo (kkmomo)

學校 : 不指定學校
編號 : 29247
來源 : [223.137.94.20]
最後登入時間 :
2024-06-28 12:05:12
d212. 東東爬階梯 | From: [36.230.109.54] | 發表日期 : 2015-07-30 23:07

以下是我的code

我很納悶  為何我的程式在44以前 都是正確的  可是在45的時候卻錯誤了

請大家指點指點  謝謝

#include //    b432
#include
using namespace std ;

unsigned long long int C( int a , int b ) ;
unsigned long long int P( int a ) ;

int main(int argc, char** argv) {
    
    unsigned long long int n ;
    while ( cin >> n ){
        unsigned long long int sum = 0 ;
        printf("正解 = %.0lf   ",sqrt(5)/5*(pow((1+sqrt(5))/2,n+1)-pow((1-sqrt(5))/2,n+1)));
        
        if ( n % 2 == 0 ){
            for ( int i = 1 ; i < n/2 ; i++ ){
                sum += C(n-i,i) ;
            }
            printf("\t我的回答 = %lld\n",2+sum) ;
        }else{
            for ( int i = 1 ; i <= n/2 ; i++ ) {
                sum += C(n-i,i) ;
            }
            printf("\t我的回答 = %lld\n",1+sum) ;
        }
    }
}

unsigned long long int C( int a , int b ) {
    int c = a - b ;
    unsigned long long int sum = 1 ;
    if ( b > c ) swap(b,c) ;
    for ( int i = 1 ; i <= b ; i++ )
        sum *= c+i ;
    return sum / P(b) ;
}

unsigned long long int P( int a ){
    unsigned long long int sum = 1 ;
    for ( int i = 2 ; i <= a ; i++ ) sum *= i ;
    return sum ;
}

階乘連乘爆掉了


 
ZeroJudge Forum