解题思路:
其实判断奇偶性的题目,我们在很多题中都见过,无疑是用x%2==1 or x%2==0 来判断,但是对于超过int 甚至long long 的数字或者是有时间限制的题目来说,我们这样做肯定是行不通的,那么,就得使用一些技巧,把其间不必要的计算过程和容易产生错误的计算过程尽量的避免掉,那么我们才能得到正确的结果。
这道题用到的最为普遍的思想就是说,一个数无论他多大,那么我们只用判断他的最后一位是奇数还是偶数就可以了,那么我们把这个数字存放在一个char数组里,然后将最后一位转化成为整数,s[len-1]-'0',通过对这个数字的奇偶性进行判断就可以了~
代码:
# include<cstdio> # include<iostream> # include<cstring> using namespace std; char s[10000]; int main(void) { cin>>s; int len = strlen(s); if ( (s[len-1]-'0')%2==1 ) { cout<<"ji"<<endl; } else { cout<<"ou"<<endl; } return 0; }
PS:其他同样可以用来判断奇偶数的方法如下:
if( x&1 == 1 )
cout<<"ji"<<endl;
else
cout<<"ou"<<endl;
我们知道计算机中的数字通常用二进制补码表示。
如果为正数,补码与原码相同,直接看最后一位(因为数字1的前面N位均为0,跟它做与运算,前面肯定为0),奇数为1,偶数为0,与1相与,结果不变。
如果为负数,补码转原码:保持符号位不动,其它各位取反+1,即为负数的绝对值原码全部取反+1。还是看最后1位,先取反,再+1,结果还是和原来相同。进行与运算时还是原来的末位,所以用跟1做与运算还是保持原来的结果。