如题:
求一算法来代码如下计算方法switch (i) {
                            case 21:
                                num = 1;
                                break;
                            case 20:
                                num = 2;
                                break;
                            case 19:
                                num = 4;
                                break;
                            case 18:
                                num = 8;
                                break;
                            case 17:
                                num = 16;
                                break;
                            case 16:
                                num = 32;
                                break;
                            case 15:
                                num = 64;
                                break;
                            case 14:
                                num = 128;
                                break;
                            case 13:
                                num = 256;
                                break;
                            case 12:
                                num = 512;
                                break;
                            case 11:
                                num = 1024;
                                break;
                            case 10:
                                num = 2048;
                                break;
                            case 9:
                                num = 4096;
                                break;
                            case 8:
                                num = 8192;
                                break;
                            case 7:
                                num = 16384;
                                break;
                            case 6:
                                num = 32768;
                                break;
                            case 5:
                                num = 65536;
                                break;
                            case 4:
                                num = 131072;
                                break;
                            case 3:
                                num = 262144;
                                break;
                            case 2:
                                num = 524288;
                                break;
                            case 1:
                                num = 1048576;
                                break;
                            default:
                                num = 1;
                                break;                        }

解决方案 »

  1.   

    i=21-->2的0次方
    i=20-->2的1次方
    ..............
    i=1-->2的20次方else 2的0次方
      

  2.   

    num = Convert.ToInt32(Math.Pow((double)(i - 21), (double)2));
      

  3.   

    其实这个规律就是2的倍数。我的I是一个变量来的。如果i=23的话。那就是23时,num=1,22时,num=2,21时 NUM=4.........
      

  4.   


    double d = (i > 0 && i < 22) ? Math.Pow(21 - i, 2) : 1;
      

  5.   

                int i = 2;
                double result = 0;
                if (i >= 1 && i <= 21)
                {
                    result = Math.Pow(2, 21 - i);
                }
                else
                {
                    result = 1;
                }
      

  6.   

    虽然写出来了,但是说实话,你这么判断没有什么意义,因为你是在程序中对i进行判断,因此程序只会走case i这一步,按你所说,那么,返回值只会是1.
      

  7.   

       &  用这个符号计算
        
      

  8.   

    temp = 1 << ((21 - i) > 0 ? (21 - i) : 0);
    可以再优化优化,在上班没有办法多想,见谅。
      

  9.   

    for(int i=21;i>=0;i--)
    {
       console.writeline("此时i的值为:{0},num为:{1}",i,2^(21-i));
    }
      

  10.   

    这样应该容易明白点
    static void Main(string[] args)
            {
                for (int i = 21; i > 0; i--)
                {
                    Console.WriteLine(Test(i));
                }
                Console.Read();
            }        static int Test(int i)
            {
                int temp = 21 - i;
                int result = 1;
                while (temp > 0)
                {
                    result = result * 2;
                    temp--;
                }
                return result;
            }
      

  11.   

    if(i<=20&&i>0)
    {
       num=2;    
       for(int j=1;j<(21-i);j++)
       {
           num=num*2;
       }
    }
    else
        num=1;
    这个算法可以,试过的。