题解 P2955 [USACO09OCT]奇数偶数Even? Odd?
其实这一题本质很简单:判断一个数是奇数还是偶数
可是要命的是数据范围
看到很多人用字符串完成此题,其实不用字符串也能完成,代码还很简单
先分析一下如何判断一个数的奇偶性。
一般我们判断一个数字是否是2的倍数用x%2或x&1,其实它们同样适用于溢出后变成的负数
例:(以int为例,其实其他数据类型都可以)
| 输入的x | x的二进制表示 | (bool)(x%2) |
(bool)(x&1) |
|---|---|---|---|
(但cin和scanf貌似不是简单地溢出,要用输入优化)
这样问题就变简单了:输入一个int,判断它是否是偶数
奉上代码:(巨丑)
#include<bits/stdc++.h>
using namespace std;
inline int read()
{
char ch=getchar();
int x=0;
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9')
{
x=x*10+ch-48;
ch=getchar();
}
return x;
}
int main()
{
int n=read();
while(n--)
if(read()&1)puts("odd");
else puts("even");
}
卡常、卡长(代码长度)之后的代码:
#include<stdio.h>
inline int read()
{
register char ch=getchar();
register int x=0;
while(ch>'9'||ch<'0')ch=getchar();
while(ch<='9'&&ch>='0')x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
return x;
}
int main()
{
int n=read();
while(n--)(read()&1)?(puts("odd")):(puts("even"));
}
话说一开始我没看数据范围直接上去打然后直接A掉了
吐槽:你谷表格崩了几年了。。。