要考虑到n很大,要求速度快
不需要for循环的。
function returnSum(n){
if(n<0) then return false
if n % 2 == 0 thenreturn - n/2elsereturn (n+1)/2end
}
#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);elsetemp=(-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;}
32位系统里面当n大约为几百的时候就溢出了。这个是经典的用软件方法模拟数学运算问题。一种方式为用浮点数存储,当然结果不准确。正确方式为定义一个数组byte n[MAX_INT]; MAX_INT看系统情况,数组的每一个元素表示一个进位上的数字,用循环从低位到高位累加,注意要设置一个变量表示当前加法的进位。分两种情况,N本身还能够用int表示,N本身不能够用int表示,后者更麻烦了。注意随时可能会溢出。
告诉面试官,用python,管你有多大都一样
公式为: -1*(n/2)+(n%2)n,按照这个编写程序,/为整除,%为求余。shr n,1 //n整除2,数算移位导致cf被置位adc al,al //计算n%2,带进位加,cf反应到al
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))这都是等差数列,用公式算也可以吧.
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(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
}
#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;
}
32位系统里面当n大约为几百的时候就溢出了。这个是经典的用软件方法模拟数学运算问题。
一种方式为用浮点数存储,当然结果不准确。
正确方式为定义一个数组byte n[MAX_INT]; MAX_INT看系统情况,数组的每一个元素表示
一个进位上的数字,用循环从低位到高位累加,注意要设置一个变量表示当前加法的进位。
分两种情况,N本身还能够用int表示,N本身不能够用int表示,后者更麻烦了。注意随时可能会溢出。
告诉面试官,用python,管你有多大都一样
公式为: -1*(n/2)+(n%2)n,按照这个编写程序,/为整除,%为求余。
shr n,1 //n整除2,数算移位导致cf被置位
adc al,al //计算n%2,带进位加,cf反应到al
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))
这都是等差数列,用公式算也可以吧.