2011-12-06 11 views
5

De Proyecto Euler, problem 45:Proyecto Euler número 45

triángulo, pentagonales y hexagonales números son generados por las siguientes fórmulas:

Triángulo T_ (n) = n (n + 1)/2 1, 3, 6, 10, 15, ...

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

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

Se puede verificar que T_ (285) = P_ (165) = H_ (143) = 40755.

Halla el siguiente número de triángulo que también es pentagonal y hexagonal.

Aquí está la pregunta. Es bastante simple y sencillo, pero el problema es que mi programa tiene un problema técnico, en el momento en que el valor del número de triángulo excede el valor máximo que puede tener en el tipo de datos int. Intenté buscar la red para otros tipos de datos pero no tuve éxito.

Código

 #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); 
    } 

Respuesta

5

Trate unsigned long long. Deberia de funcionar.

+1

¿Puede decirme el marcador de posición para ello? –

+1

unsigned long long variablename; – johnathon

+1

Simplemente reemplace cada 'int' en nuestro programa con' unsigned long long', y cambie los especificadores de formato de '% d' a'% llu'. –

Cuestiones relacionadas