算法-写一个计算1-2+3-4+5-6+7……+n的值(n很大)的函数

算法-写一个计算1-2+3-4+5-6+7……+n的值(n很大)的函数

夜无邪 发布于 2017-02-06 字数 32 浏览 1240 回复 6

要考虑到n很大,要求速度快

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

夜无邪 2017-10-04 6 楼

不需要for循环的。

function returnSum(n)
{

if(n<0) then return false

if n % 2 == 0 then
return - n/2
else
return (n+1)/2
end

}

浮生未歇 2017-09-10 5 楼

#include<iostream>
using namespace std;

long fn(int n)
{
long temp;
if(n<=0)
{
cerr<<"n的值必须大于零!"<<endl;
}

if(n%2==0)
temp=(-1)*(n/2);
else
temp=(-1)*(n/2)+n;

return temp;

}

int main()
{
int n;
cout<<"请输入n的值:"<<endl;
cin>>n;
cout<<"(1-2+3-4+5-6+7......+n)="<<fn(n)<<endl;
return 0;
}

浮生未歇 2017-09-09 4 楼

32位系统里面当n大约为几百的时候就溢出了。这个是经典的用软件方法模拟数学运算问题。
一种方式为用浮点数存储,当然结果不准确。
正确方式为定义一个数组byte n[MAX_INT]; MAX_INT看系统情况,数组的每一个元素表示
一个进位上的数字,用循环从低位到高位累加,注意要设置一个变量表示当前加法的进位。
分两种情况,N本身还能够用int表示,N本身不能够用int表示,后者更麻烦了。注意随时可能会溢出。

归属感 2017-07-24 3 楼

告诉面试官,用python,管你有多大都一样

清晨说ぺ晚安 2017-06-10 2 楼

公式为: -1*(n/2)+(n%2)n,按照这个编写程序,/为整除,%为求余。
shr n,1 //n整除2,数算移位导致cf被置位
adc al,al //计算n%2,带进位加,cf反应到al

晚风撩人 2017-05-27 1 楼

function returnSum($n)
{

$sum = 0;
if($n<0) return false;
for ($i =1;$i <=$n;$i++)
{
if ($i%2 == 0)
{
$sum = $sum - $i;
}else{
$sum = $sum + $i;
}
}
return $sum;

}

echo returnSum(5);

(1+3+5+7+....+n)-(2+4+6+8+....+(n-1))
这都是等差数列,用公式算也可以吧.