当我调用fun(7)的时候,希望将case1,case2,case4都执行一遍该怎么控制?
void fun(int n)
{
switch(n)
{
case 1:
funa();
break;
case 2:
funb();
break;
case 4:
func();
break;
}
{
如果我希望 7 = 1+2+4;
当我调用fun(7)的时候,希望将case1,case2,case4都执行一遍该怎么控制?代码应该如何实现
[解决办法]
如果一定要switch
- C/C++ code
void fun(int n){ for(int i=0; i< 30; i++) { switch(n & 1<i) { case 1: funa(); break; case 2: funb(); break; case 4: func(); break; } }}
[解决办法]
- C/C++ code
#include<stdio.h>#include<stdlib.h>void funa(void){ printf("in void funa(void)\n");}void funb(void){ printf("in void funb(void)\n");}void func(void){ printf("in void func(void)\n");}void fund(void){ printf("in void fund(void)\n");}void (*tab[])(void) = { funa, funb, func, fund};void fun(int n){ int i; if (n <= 0) { return; } for (i = 0; (1 << i) <= n; ++i) { if (n & (1 << i)) { tab[i](); } }}int main(){ fun(7); system("pause"); return 0;}
[解决办法]
- C/C++ code
void fun(int n){ switch(pow(2,int(log(n)))) { case 4: func(); n-=pow(2,int(log(n))); fun(n); break; case 2: funb(); n-=pow(2,int(log(n))); fun(n); break; case 1: funa(); n-=pow(2,int(log(n))); fun(n); break; }}
[解决办法]
楼主是用来练手的吧,这个问题要使用递归,如下:
void fun(int n)
{
if (n>=0)
{
if (n>=4)
{
func();
fun(n-4);
}
else if(n>=2)
{
funb();
fun(n-2);
}
else if(n>=1)
{
funa();
fun(n-1);
}
}
}
[解决办法]
类似这样可以满足LZ需求否?
- C/C++ code
void fun(int n){ if (n & 0x1) { funa(); } if (n & 0x2) { funb(); } if (n & 0x4) { func(); }}