读书人

当小弟我调用fun(7)的时候希望将cas

发布时间: 2012-07-29 15:26:14 作者: rapoo

当我调用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();    }} 

读书人网 >C++

热点推荐