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);
}
Czy możesz mi powiedzieć, który symbol zastępczy? –
unsigned long long variablename; – johnathon
Po prostu zamień każdy "int" w naszym programie na 'unsigned long long' i zmień specyfikatory formatu z'% d' na '% llu'. –