洛谷P2955题解

数的奇偶性QWQ

洛谷P2955题解

P2955奇数偶数 Even?Odd?

题面描述

王太阳那惨无人道的二年级老师搞了一个有 N 个正整数的表叫王太阳去判断“奇偶性”(这个词语意思向二年级的学生解释,就是“这个数是单数,还是双数啊?”)。王太阳被那个表的长度深深地震惊到了毕竟他才刚刚学会数数啊。

写一个程序读入N个整数,如果是双数,那么在单立的一行内输出”even”,如果是单数则类似地输出”odd”.

分析

本题看起来很简单,大多数人第一反应应该是:

1
2
if(num%2==0)	printf("even");
else printf("odd");

但是数据范围确实令人吃了一惊:

$$1 \leq num \leq10^{60} $$

什么?高精取模?根本不需要!

其实这是一道小学一年级的数学题。

判断一个数是否能被二整除,只需要判断它的最后一位是否能被2整除即可。

所以,显然用字符串解决。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/* Headers */
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
using namespace std;
namespace FastIO{
const int BUFSIZE=(1<<20);
char ibuf[BUFSIZE],*is=ibuf,*it=ibuf;
char obuf[BUFSIZE],*os=obuf,*ot=obuf+BUFSIZE;
inline char getch(){
if(is==it)
it=(is=ibuf)+fread(ibuf,1,BUFSIZE,stdin);
return (is==it)?EOF:*is++;
}
inline int getint(){
int res=0,neg=0,ch=getch();
while(!(isdigit(ch)||ch=='-')&&ch!=EOF)
ch=getch();
if(ch=='-'){
neg=1;ch=getch();
}
while(isdigit(ch)){
res=(res<<3)+(res<<1)+(ch-'0');
ch=getch();
}
return neg?-res:res;
}
inline void write(int x){
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
inline void space(int x){
if(x!=0) putchar(' ');
else putchar('\n');
}
}
using namespace FastIO;

/* definitions */
string s;
int n,len;

/* functions */

int main(int argc,char *argv[]/*习惯*/){
#ifndef ltyQwQ's_FILE
ios::sync_with_stdio(false);//关闭流同步,加快cin&&cout的速度。
cin>>n;
for(int i=1;i<=n;i++){
cin>>s;
len=s.length()-1;
if((s[len]-'0')%2==0) cout<<"even";//判断字符串最后一位是否能被2整除。
else cout<<"odd";
}
#endif
return 0;//完美结束。
}

THE END