计算2的n次幂

 可以通过for循环类累加,实现2的次幂计算,但是它的长度是有限的,计算次幂再一次对数据类型的长度复习一遍。

 

如下:

byte Byte 无符号整数 8 0 到 255
sbyte SByte 有符号整数 8 -128 到 127
int Int32 有符号整数 32 -2,147,483,648 到 2,147,483,647
uint UInt32 无符号整数 32 0 到 4294967295
short Int16 有符号整数 16 -32,768 到 32,767
ushort UInt16 无符号整数 16 0 到 65535
long Int64 有符号整数 64 -922337203685477508 到 922337203685477507
ulong UInt64 无符号整数 64 0 到 18446744073709551615
float Single 单精度浮点型 32 -3.402823e38 至 3.402823e38
double Double 双精度浮点型 64 -1.79769313486232e308 至 1.79769313486232e308
char Char 单 Unicode 字符 16 文本中使用的 Unicode 符号
bool Boolean 逻辑布尔值类型 8 True 或 False
object Object 所有其他类型的基类型 
string String 字符序列 
decimal Decimal 精确小数类型或整型,可以表示带有 29 个有效位的十进制数 128 ±1.0 × 10e−28 至 ±7.9 × 10e28

发现计算2的100次幂时,首先观察,double是64位的,不行,长度不够。decimal呢!

private static void  GetPow(int num)          

  decimal sum= 0;
            for (int i = 1; i < num; i++)
            {
                decimal temp = 2;
                for (int n = 1; n < i; n++)
                {
                    temp = temp*2;
                }
                sum += temp;
                Console.WriteLine("for_sum------" + i + "-------" + sum);//decimal的范围为128位。32高位,32中位,32低位,低位占去了32位,所以只能计算到2的64次方。但用decimal可计算到95位,这个问题问题不大清楚。
            }

            Console.WriteLine(string.Format("{0} /n {1}",Math.Pow(2,num),sum));//可通过这个方法简单实现,但是后面略去了很多位,没有完全显示,不是想要的。
             

 

           //下面得方法可以很好的解决计算N次幂的问题。


            int[] iArr = new int[num];
            int j = 0;
            for (int i = 1; i < iArr.Length+1; i++)
            {
                iArr[i - 1] = Convert.ToInt32(Math.Floor((Math.Pow(2, iArr.Length) % Math.Pow(10, i)) / Math.Pow(10, (i - 1))));  //获取N次幂中个位数的方法,放进数组,从1开始。
            }
            for (int i = iArr.Length-1; i >= 0; i--)
            {
                if (iArr[i] != 0)
                {
                    j = i;
                    break;
                }
                else
                    continue;
            }
            for (int i = j; i >= 0; i--)//倒叙显示所有的位数,得到N次幂。
            {
                Console.WriteLine(string.Format("{0}------{1}",iArr[i],i));
            }

            Console.WriteLine();
            Console.ReadKey();

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值