首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

当小弟我调用fun(7)的时候,希望将case1,case2,case4都执行一遍该如何控制

2012-07-29 
当我调用fun(7)的时候,希望将case1,case2,case4都执行一遍该怎么控制?void fun(int n){switch(n){case 1:f

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

热点排行