程序中奇偶性的讨论

一起来玩玩呗 2014-02-27 07:47:43
在编程中,有很多时候都需要对数的奇偶性进行讨论,那有没有什么小技巧,可以避开对数的奇偶性讨论了?
...全文
328 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
FancyMouse 2014-03-05
  • 打赏
  • 举报
回复
大部分情况下这么做是没意义的。
waterSStreaming 2014-03-03
  • 打赏
  • 举报
回复
函数式编程,把奇偶的操作都抽象成一个函数,在具体的操作语句中把具体的操作函数传进去,用高阶函数执行
yyfhz 2014-02-28
  • 打赏
  • 举报
回复
sorry,写错了,应该是 y=(1-x%2)*f1(x)+(x%2)*f2(x)
yyfhz 2014-02-28
  • 打赏
  • 举报
回复
如果只是两个数学公式,譬如 if (x%2==0) { y=f1(x) } else { y=f2(x) } 那倒是可以用 y=(x%2-1)*f1(x)+(x%2)*f2(x) 来汇总的。
yyfhz 2014-02-28
  • 打赏
  • 举报
回复
就是要避开类似 if (x%2==0) { ... } else { ... } 这样的语句? 那要看你这2个分支里面的内容的一致性如何了,如果相差的太多,合并后的程序难以维护,不划算。
waterSStreaming 2014-02-28
  • 打赏
  • 举报
回复
讨论数字的奇偶性,也就是数字X在奇偶上有两个程序执行分支,如果用函数指针,可以用一个长度为2的函数指针数组,用(X&1)作为访问的索引,这样就可以用同样的"入口",执行不同的分支了。

#include<iostream>
#include<string>

using namespace std;

void f1(int a, int b)
{
	cout << "this is odd branch. " << (a + b) << endl;
}

void f2(int a, int b)
{
	cout << "this is even branch. " << (a + b) << endl;
}

void (*arr[2])(int, int) = {&f1, &f2};

int main()
{
	for(int i = 0; i < 10; ++i)
	{
		(*arr[(i & 1)])(i, i + 1);
	}
	return 0;
}
一起来玩玩呗 2014-02-27
  • 打赏
  • 举报
回复
自己顶个....各位有啥想法的都说下哦

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧