思路:假定x=m+(m+1)+……+(m+n-1),其中,m表示最小的数字,总共为从m开始,连续的n个数。
则x=n(2m+n-1)/2。对该等式进行变换,可得m=x/n - (n-1)/2,且m>=1,m等式的分子必须是2的整数倍。这样才能是连续整数。代码实现如下:
bool IsSumOfContinue(int x,int n)
{
int start=0,end=0,flag=0;
float temp=0.0;
temp =(float)x/n - (float)(n-1)/2;
if (temp == (int)temp)
{
cout<<"n="<<n<<":有连续的数字"<<endl;
for (flag=1, start =temp, end= start+n-1; start<=end;start++ )
{
cout<<start;
}
cout<<endl;
return true;
}
if(flag==0)
{
cout<<"n="<<n<<":没有合适的数字"<<endl;
return false;
}
}
int main()
{
int X;
int n=1;
cin>>X;
while(!(++n&&IsSumOfContinue(X,n)))
{
IsSumOfContinue(X,n);
}
getchar();
}