求2^n-char 数组表示超大整数

来源:互联网 发布:知乎日报和读读日报 编辑:程序博客网 时间:2024/06/06 02:26

如果用int数组存储,则1000*1000*4=4M,既超过20就超过4M了。所以将int存储变成char存储。

比如2的64次方=18446744073709551616,用数组存储为a[]={1,8,4,4,6,7,4,4,0,7,3,7,0,9,5,5,1,6,1,6}

比如:2*2*2*2*2=32.每一位看成一个bit

a[0]=1*2*2*2=8<9不进位. a[0]=8*2=16; 16>9=>a[1]=1,a[0]=6;(16)

a[1]*2=2,a[0]*2=12;12>9=>a[1]=2+1=3;a[0]=12-10=2; (32)   

16*2=a[1]*2+a[0]*2;

最小化边界将999改成5即可。

a[i]=1; 这是整数的1=0x01;放到char中,按照%c提取,则是ascii字符1对应的字符;如果是按照整数提取是1.

char和int比较按照二进制存储比较.


#include <stdio.h>

void multiplyByTwo(char *a)

{

int i;

for (i=0; i<1000; i++)

a[i] *= 2;


for (i=0; i<1000; i++)

if (a[i]>9)

{

a[i] -= 10;

a[i+1]++;

}

}

int main(void)

{

char a[1000] = {'\0'};

int i;

int n;

printf("请输入n的值:");

scanf("%d",&n);

a[0] = 1;

for (i = 0; i<n; i++)

multiplyByTwo(a);

printf("2^%d = ",n);

for (i = 999; i>=0; i--)

if (a[i] != '\0') break;

for (; i>=0; i--)

putchar(a[i] + '0');

printf("\n");

return 0;

}

0 0