在不使用数学/按位运算符的情况下查找偶数/奇数

8 c++

我最近被要求编写一个程序,在不使用任何数学/按位运算符的情况下确定数字是偶数还是奇数!

有任何想法吗?

谢谢!

Ult*_*nct 35

这可以使用1位字段来完成,如下面的代码所示:

#include<iostream>

struct OddEven{
    unsigned a : 1;
};
int main(){
    int num;
    std::cout<<"Enter the number: ";
    std::cin>>num;
    OddEven obj;
    obj.a = num;
    if (obj.a==0)
        cout<<"Even!";
    else
        cout<<"Odd!";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

因为obj.a是一个单字段值,所以只有LSB会被保存!你可以检查一下你的答案.. 0 - >即使是其他奇怪.. !!

  • 如果你使用bitfield` unsigned`而不是`int`,它就变得非常便携了! (7认同)
  • 实际上,Martin York无论表示如何都会工作:"如果目标类型是无符号的,则结果值是与源整数一致的最小无符号整数" (3认同)

mis*_*tor 14

最简洁的解决方案:

#include <iostream>
#include <string>
#include <bitset>

int main() {
  std::string const type[] = {"even", "odd"};
  int n;
  std::cout << "Enter an integer." << std::endl;
  std::cin >> n;
  std::cout << type[(std::bitset<1>(std::abs(n))[0])] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)


Unc*_*ens 6

switch (n) {
    case 0:
    case 2:
    case 4:
    ...
        return Even;
}
return Odd;
Run Code Online (Sandbox Code Playgroud)

  • downvotes =>这件事什么时候会结束?0,2,4,6,8,10,12,......? (11认同)

pab*_*han 5

您可以将数字转换为字符串,并检查最后一位数字是1,3,5,7还是9.

  • @Amnon:其他地方提出的单比特字段在内部使用按位运算符.这只是你认为这个采访难题是多么愚蠢的问题:"非常"或"非常". (4认同)