来自Project Euler,problem 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);
}
答案 0 :(得分:5)
尝试unsigned long long。它应该工作。