#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 首次发布
文章介绍了如何使用C语言编写一个函数getValidBitNum,用于计算给定数组中有效位数,然后利用这个函数实现2的指数次方运算,同时检查并处理可能出现的内存溢出情况。
&spm=1001.2101.3001.5002&articleId=132607517&d=1&t=3&u=1e131f46a599406596adbd0a79f80bae)
2789

被折叠的 条评论
为什么被折叠?



