#include <stdio.h>
#include <string.h>
int getValidBitNum(unsigned char num[],int length)
{
int temp=0;
temp = length;
while( ! num[temp-1])
{
temp--;
}
return temp;
}
int main()
{
unsigned char num[400]={};
num[0] = 1;
int length = sizeof(num)/sizeof(num[0]);
bool error = 0;
int index = 1024; //指数
int i =0;
for(;i < index;i++)
{
int k=1;
int carryBit = 0;
unsigned char temp=0;
int ValidBitNum = getValidBitNum(num,length);
for(int j=0;j<ValidBitNum;j++)
{
temp = num[j]*2;
num[j] = temp % 10;
num[j] += carryBit;
carryBit = temp/10;
}
if((length > ValidBitNum) && (carryBit != 0))
{
num[ValidBitNum] = carryBit;
}
else if(carryBit != 0)
{
printf("数值溢出,请扩大内存!"); //计算出错,报错
error = 1;
break;
}
}
if(error != 1) //计算正确打印结果
{
printf("2的%d次方计算结果有效位 = %d",index,getValidBitNum(num,length));
printf("\n");
printf("2的%d次方计算结果 = ",index);
for(int i=getValidBitNum(num,length) -1;i>=0;i--)
{
printf("%d",num[i]);
}
printf("\n");
}
}
【C语言】超大数据计算,利用数组,2的n次方计算(n最大值取决于数组大小)
于 2023-08-31 17:14:24 首次发布