可以通过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();
}