2011-12-06 18 views
5

z projektu Eulera, problem 45:Projekt nr Eulera 45

trójkąt, pięciokątne, sześciokątne, numery są generowane za pomocą następujących wzorów:

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

pięciokątna P_ (n) = n (3-n-1)/2 1, 5, 12, 22, 35, ...

sześciokątne H_ (n) = n (2n-1) 1, 6, 15, 28, 45, ...

Można sprawdzić, czy T_ (285) = P_ (165) = H_ (143) = 40755.

Znajdź kolejny numer trójkąta, który jest również pięciokątny i sześciokątny.

Oto pytanie. Jest to bardzo proste i proste, ale chodzi o to, że mój program działa w usterce, gdy wartość numeru trójkąta przekracza maksymalną wartość, jaką można mieć w typie danych int. Próbowałem wyszukiwania netto dla innych typów danych, ale bez powodzenia.

Kod

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

Odpowiedz

5

Spróbuj unsigned long long. Powinno działać.

+1

Czy możesz mi powiedzieć, który symbol zastępczy? –

+1

unsigned long long variablename; – johnathon

+1

Po prostu zamień każdy "int" w naszym programie na 'unsigned long long' i zmień specyfikatory formatu z'% d' na '% llu'. –

Powiązane problemy