1-2+3-4+5-6+...+n的java实现?
我的答案:public static int add(int n){
int b = n/2;
int a = n%2;
if(a==0){
return -b;
}else return -b+n;
}
可经理说不行,望达人指点!
我的答案:public static int add(int n){
int b = n/2;
int a = n%2;
if(a==0){
return -b;
}else return -b+n;
}
可经理说不行,望达人指点!
int sum=0;
for(int i=1;i<=n;i++){
if(i%2==0){
sum=sum-i
}else{
sum=sum+i;
}
}
}
{
k=-(n/2);
}
else
{
k=(n+1)/2;
}
int sum=0;
int num=1;
for(int i=1;i<=n;i++){
sum = sum + i * num;
num = -num;
}
}
这样貌似简单多了
float b = n/2.0;//改为浮点型呢?行不行,应该考虑奇偶吧?
int a = n%2;
if(a==0){
return -b;
}else return -b+n;
}
return n%2*n-n/2;
return -((n >> 2) + 1);
else
return -(n >> 2);
楼上的是呆瓜 坚定完毕。
你看你写的程序,当我取n值为1时会怎么样,你想肯定会输出1,结果你的程序只会输出1/2,奇怪吧,1%2=1,执行-b+n;如果这段代码被用到你们公司的软件中去,会让QA疯掉,
这就是编程的边界值原则,每编写一段代码,一定要查看它的边界值,建议看一下软件测试方面的书.
我觉得楼主的没错啊,
n为1时:b的值为0,(注意b的类型int)
a的值为1,返回的值-b+n=1
结果也是 1啊,没错。
int b = int(n/2);
其实楼主的程序只加两排就完美了
int b = n/2;
int a = n%2;
if(n==1)
{
return 1;
}
else if(a==0)
{
return -b;
}
else return -b+n;
回:ljdfd
我觉得楼主的没错啊,
n为1时:b的值为0,(注意b的类型int)
a的值为1,返回的值-b+n=1
结果也是 1啊,没错。
呵呵,象zudy99老兄说的,这不是对嘛
让你用计算机实现这个序列的求和,而不是计算这个序列。就好比让你计算5!,你编程打印5×4×3×2×1是不对的,应该用递归。
javaalix()朋友的编程是正确的。
return n * (n + 1) / 2;
}
是1-2+3-4+5-6+...+n,不是从1加到n,不过,解决的方法仍是先推算好,再写程序。
当n为偶数的时候,结果为-n/2;
当n为基数的时候,结果为-(n-1)/2 + n = (n+1)/2;到这里,程序就很容易写了add(int n) {
if(a%2==0) {
return -n/2;
} else {
return (n+1)/2;
}
}欣然看到楼上xiaozhou1121也是这样做的。我想一旦涉及数学运算的程序,应该先演算出一个表示结果的公式,再写程序,这样程序简洁、健壮;否则用程序臃肿,执行效率低下(能和直接使用公式比吗?),还容易出错。