2011-12-06 17 views
5

Da Project Euler, problem 45:Project Euler numero 45

Triangle, pentagonali e esagonali numeri sono generati dalle seguenti formule:

Triangle T_ (n) = n (n + 1)/2 1, 3, 6, 10, 15, ...

pentagonale P_ (n) = n (3n-1)/2 1, 5, 12, 22, 35, ...

esagonale H_ (n) = n (2n-1) 1, 6, 15, 28, 45, ...

si può verificare che T_ (285) = P_ (165) = H_ (143) = 40755.

Localizzare il numero successivo triangolo che è anche pentagonale e esagonale.

Ecco la domanda. È piuttosto semplice e diretto, ma il fatto è che il mio programma si trova in un problema tecnico, nel momento in cui il valore del numero del triangolo supera il valore massimo che è possibile avere nel tipo di dati int. Ho provato a cercare la rete per altri tipi di dati, ma senza successo.

Codice

 #include<stdio.h> 
    int main(void) 
    { 
     int i,j,t,h,p,k; 
     int n=10000; 
     for(i=0;i<n;i++) 
     { 
      t=(i*(i+1))/2; 
      for(j=0;j<n;j++) 
      { 
       h=j*(2*j-1); 
       if(h>t) 
       break; 
       if(h==t) 
       { 
        //printf("%d %d\n",h,t); 
        for(k=0;k<n;k++) 
        { 
         p=(k*(3*k-1))/2; 
         if(p>h) 
         break; 
         if(p==h) 
         { 
          printf("%d %d\n",p,i); 
          break; 
         } 
        } 
       } 

      } 
     }  
     printf("done\n"); 
     return(0); 
    } 

risposta

5

Prova unsigned long long. Dovrebbe funzionare.

+1

Puoi dirmi il segnaposto per favore? –

+1

nomecomando long lungo non firmato; – johnathon

+1

Sostituisci ogni 'int' del nostro programma con' unsigned long long ', e cambia gli specificatori di formato da '% d' a'% llu'. –

Problemi correlati