红星美凯龙宝龙店电话:求助算法!

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 01:16:13
假定你所使用的计算机能够表示的最大整数为32767。写出一个算法,该算法能够对于任意输入的正整数n输出1+2+...+n的精确值,其中1<=n<=32767 。
用C或C++都行.
觉得cychappy的说法有一定的道理,不过觉得用数组会不会太浪费空间了?

注意一下--------------------->>>>>>>>>>>>>是精确解!

用数组,用数组存储计算的结果,每个数位占一个数组元素,这样就可以避免溢出

请补充,你用什么语言,以给代码

VB的语法:
public function Sum(byval n as integer)as integer
dim i as integer
dim Temp as integer
'判断输入的值是否超过(32767\2),因为计算机所能表示的最大整数为32767,如果超过的话最后的结果也会超出

if n>(32767\2) then
msgbox("你所输入的值超出计算机所能表示的最大整数")
exit function
end if
For i=1 to n
temp=temp+i
Next i
return temp
end function

C的语法:
int Sum(int n)
{int Temp;
if(n>(32767%2)
{
printf("你所输入的值超出计算机所能表达的最大整数");
end;
}
For(int i=1;i<=n;i++)
{
temp+=i
}
return temp
}

//c#.net语法
for(int n=1;n<=32767;n++)
{
int sum=0;
Console.WriteLine("请输入一个1到32767之间的整数:");
n=int.Parase(Console.ReadLine()); //把输入的整数赋给整型变量i
sum=(1+n)*n/2; //求1+2+3...+n的和
return sum;
Console.WriteLine("{0}",sum); //输出求和后的值

}
//如果你用的是c ,c++,vb,java大可根据这个语法来改,其实各种语言的语法都差不多的

#include<stdio.h>
void main()
{
double sum=0;
int i,n;
printf("enter n:");/*输入n*/
scanf("%d",&n);
for(i=1;i<=n;i++)/*计算1+2+...n*/
{
sum+=i;
}

printf("\n1+2+...n=%f",sum);/*输出和*/

}

1+1