连续奇数的和

给定两个整数 X 和 Y,输出在他们之间(不包括 X 和 Y)的所有奇数的和。

输入格式

第一行输入 X,第二行输入 Y。

输出格式

输出一个整数,表示所有满足条件的奇数的和。

数据范围

−100≤X,Y≤100

输入样例1:
6
-5
输出样例1:
5
输入样例2:
15
12
输出样例2:
13
输入样例3:
12
12
输出样例3:
0

此题非常简单,但是仍然有要注意的点。

首先,输入的x和y的大小关系是未知的。而在for循环中,必须确定一个小的数和一个大的数,因此可以在for循环那里设定x比y小。那要是x实际上比y大怎么办呢?我们可以直接在输入x和y的时候就判断一次,如果x比y大就直接交换位置,还是让小的数变成x,大的数变成y。因为题目只说要研究这两个数之间的数,并没有要输出这两个数(就算要输出这两个数,在x比y大的情况下最后再换回来就好了)。

还有就是在余数的计算那里,敏锐的我一眼就看到了输入样例里的负数,于是我写了这么一行:

if(i%2==1||i%2==-1)

因为我深知,在C++里余数的值只和被除数有关,和除数半毛钱关系都没有,更是和被除数与除数符号的异同与否沾不上一点边。

我这么写确实是对的,符号也确实是值得注意的。只是还可以直接化简成这样:

if(i % 2 != 0)

甚至还可以化简成这样:

if (i % 2)

我知道严谨的你一定发现了,要是i是负数,返回值是-1。然鹅,在C艹里面,只有值为0的情况被认为是false。所有非零的整数,包括-1,都被视为true。啊哈哈哈哈哈哈哈哈哈哈哈哈~

那么AC代码就是这样子的:

#include<bits/stdc++.h>
using namespace std;

int main(){
    int x,y;
    int sum=0;
    cin>>x>>y;
    if(x>y)
     swap(x,y);
    for(int i=x+1;i<y;i++){
        if(i%2)
        sum+=i;
    }
    cout<<sum;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值