我最近被要求编写一个程序,在不使用任何数学/位运算符的情况下确定数字是偶数还是奇数!
有什么想法吗?
谢谢!
答案 0 :(得分: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;
}
因为obj.a是一个单字段值,所以只有LSB会被保存!你可以检查一下你的答案.. 0 - &gt;即便如此,奇怪...... !!
答案 1 :(得分: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;
}
答案 2 :(得分:6)
switch (n) {
case 0:
case 2:
case 4:
...
return Even;
}
return Odd;
答案 3 :(得分:5)
您可以将数字转换为字符串,并检查最后一位数字是否为1,3,5,7或9。
答案 4 :(得分:2)
我不确定==是否被视为数学运算符,如果不是,则将数字转换为字符串并测试最后一个字符是否等于0,2,4,6或8。
编辑: ==似乎被视为比较运算符/关系运算符。
答案 5 :(得分:1)
......你为什么要这样做?
只有在您尝试避免撰写 +, - ,/,*,&amp;,|时才可以这样做。 ^,或%。
开关和字符串转换具有隐式查找表,因此也是隐式添加。
以下是为了避免它:
//C/C++ code (psuedo'd up)
struct BitNum
{
unsigned int num : 1;
};
...
BitNum a;
a.num = number_to_be_tested;
if(a.num == 0) return EVEN;
return ODD;
...
但隐含的用途&amp;得到了一点点。
答案 6 :(得分:1)
这是一个奇怪的挑战。
您可以将该数字用作加载指令的内存地址偏移量。如果您的架构要求内存访问在双字节偏移上对齐,则处理器将允许来自偶数地址的加载并为奇数地址(未对齐的加载)抛出异常。
答案 7 :(得分:0)
如何简单按位或?
bool is_odd(const int &number){
return (number == (number | 1));
}
bool is_even(const int &number){
return (number != (number | 1));
}
(编辑)嗯......我想我应该阅读标题呃?
答案 8 :(得分:0)
#include <stdio.h>
#include <math.h>
void main()
{
int num;
scanf("%d",&num);
if(fmod(num,2))
{
printf("number is odd");
}
else
printf("number is even");
}
答案 9 :(得分:0)
#include<stdio.h>
int main()
{
int num,res;
printf("\nEnter the number=");
scanf("%d",&num);
res=num&1;
if(res==0)
printf("Number is even");
else
printf("Number is odd");
return 0;
}