2011-12-06 66 views
5

從項目歐拉,problem 45項目歐拉數45

三角,五邊形,和六邊形數由下列公式生成:

三角T_(N)= N(N + 1)/ 2 1,3,6,10,15,...

五角P_(N)= N(3N-1)/ 2 1,5,12,22,35,...

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

可以驗證T_(285)= P_(165)= H_(143)= 40755.

找到下一個也是五角形和六角形的三角形數字。

下面是問題。 這非常簡單直接,但事情是,我的程序運行時會出現小故障,此時三角形數字的值超出了int數據類型中的最大值。我試圖尋找其他數據類型的網絡,但沒有成功。

代碼

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

回答

5

嘗試無符號很長很長。它應該工作。

+1

你能告訴我它的佔位符嗎? –

+1

unsigned long long variablename; – johnathon

+1

只需用'unsigned long long'替換我們程序中的每個'int',並將格式說明符從'%d'更改爲'%llu'。 –