关于C语言中2的64次方的信息

如果要在C语言中输入2的六十四次方,似乎必须使用双精度浮点数类型,并使用pow(2,64)函数进行求值。

紧急...C语言问题2的64次方错误... 即使在C99标准中,long long类型(64位,代表范围-2 63到2 63-1)也无法表示这个数,你只能间接实现。

如何用C语言编程计算2的64次方,或者计算两个大数(每个数超过15位)的乘法。 用字符串表示大数和自己计算进位的思路基本一致。

这是一个我用来计数的大数计算器。你可以计算加减乘除。足够你的大数相乘了,基本上最后的结果应该不会超过1000位数。

但是没有幂函数。

# include stdio.h #包含字符串. h

// -将字符串转换成塑料数组void str2int (char * a,char。//初始化数组(I = 0;i1024I){ ia[I]= 0;IB[I]= 0;IR[I]= 0;}//把A翻过来输入数组I = strlen(A);len = strlen(a);while(I){ I-;ia[len-I-1]= *(a I)-48;}//把B翻过来输入数组I = strlen(B);len = strlen(b);while(I){ I-;IB[len-I-1]= *(b I)-48;}}/ -比较大小int CMP (char * a,char * b if(strlen(a)strlen(b)){ SG = 0;} else if(strlen(a)strlen(b)){ SG = 1;} else { for(I = 0;I(int)strlen(a);I){ if(*(a I)*(b I)){ SG = 0;打破;} else if(*(a I)*(b I)){ SG = 1;打破;} elsesg = 0;} }返回SG;}// -加法函数char * add (char * a,char *。int ia[1024],ib[1024],IR[1024];str2int(a,b,ia,ib,IR);if(strlen(a)strlen(b))len = strlen(a);else len = strlen(b);c = 0;//加法for(I = 0;ilenI){ IR[I]=(ia[I]IB[I]c);c =(ia[I]IB[I]c)/10;} if(c = = 1){ IR[len]= 1;len} for(I = 0;ilenI){ *(a I)= IR[len-I-1]48;//Flip output } *(a len)= ' \ 0 ';返回a;}// -减法函数char * sub (char * a,char *。int ia[1024],ib[1024],IR[1024];char string[1024];char * strrtstr2int(a,b,ia,ib,IR);//符号判断SG = CMP (a,b);if(SG = = 0)len = strlen(a);else len = strlen(b);c = 0;//减法for(I = 0;ilenI){ if(SG = = 0){ if((ia[I]-IB[I]-c)= 0){ IR[I]= ia[I]-IB[I]-c;c = 0;} else { IR[I]= 10 ia[I]-IB[I]-c;c = 1;} } else { if((IB[I]-ia[I]-c)= 0){ IR[I]= IB[I]-ia[I]-c;c = 0;} else { IR[I]= 10 IB[I]-ia[I]-c;c = 1;} } } if(SG = = 1)str[0]= '-';for(I = 0;ilenI){ str[I SG]= IR[len-I-1]48;//Flip output } str[LenSG]= ' \ 0 ';strrt = str//零移除if(SG = = 0){ while(Len 1 * strrt = = ' 0 '){ strrt;len-;} } if(SG = = 1){ strrt;while(len 1 * strrt = = ' 0 '){ * strrt = '-';strrtlen-;} strrt-;} strcpy(a,strrt);返回a;}

// -乘法函数char * mul (char * a,char * b int ma[1024],mb[1024],Mr[1024];char stra[1024],strb[1024];char *strrta,* strrtbstra[0]= ' 0 ';stra[1]= ' \ 0 ';strrta = strastr2int(a,b,ma,mb,Mr);//乘法Lena = strlen(a);lenb = strlen(b);for(j = 0;jlenaj){ c = 0;Jin = 0;for(I = 0;ilenb{ Mr[I]=(ma[j]* MB[I]c);c =(ma[j]* MB[I]c)/10;} len = lenbif(c0){ strb[0]= c 48;金= 1;} for(I = 0;ilenI){ strb[I Jin]= Mr[len-I-1]48;} for(I = len;ilen j;I)strb[I Jin]= ' 0 ';strb[len j Jin]= ' \ 0 ';strrtb = strbadd(strrta,str rtb);} strcpy(a,str RTA);返回a;}// -除法函数char * div(char * a char stra[1024],strb[1024],strc[1024],strd[1024];char * strbpstrbp = strcstrcpy(stra,a);strcpy(strb,b);strcpy(strd,a);If (CMP (stra,strb) = = 1) {//Divider小于除数* a = ' 0*(a1)= ' \ 0 ';strcpy(b,stra);} else {//Divider大于除数Mul (strb," 10 ");len = strlen(a)-strlen(b);if (len==0||(len==1cmp(stra,strb)= = 1)){ strcpy(stra,a);strcpy(strb,b);I = 1;strc[0]= ' 1 ';strc[1]= ' \ 0 ';while(cmp(stra,strc)= = 0){ strc[0]= I 48;strc[1]= ' \ 0 ';mul(strc、strb);我;} * a = i 46*(a1)= ' \ 0 ';strcpy(strc,a);mul(strc、strb);sub(stra、strc);strcpy(b,stra);} else { len = strlen(a)-strlen(b);for(j = 0;j = lenj){ for(I = 0;I =(int)strlen(b);I){ if((I j-1)0)stra[I]= ' 0 ';else stra[I]= *(a I j-1);} stra[strlen(b)1]= ' \ 0 ';strcpy(strb,b);strbp = straLena = strlen(strbp);while(Lena 1 * strbp = = ' 0 '){ strbp;Lena-;} div(strbp,strb);strc[j]= * strbp;strbp = strbfor(I = 0;I(int)(strlen(b)-strlen(strb));I){ strbp-;* strbp =“0”;} for(I = strlen(b)-1;I = 0;I-){ *(a I j)= *(strbp I);} } strc[len 1]= ' \ 0 ';strbp = strcLena = strlen(strbp);while(Lena 1 * strbp = = ' 0 '){ strbp;Lena-;} strcpy(a,strbp);mul(strbp,b);sub(strd,strbp);strcpy(b,strd);} }返回a;}

void main(){ char a[1024],b[1024],c;c =“0”;而(c!= ' q = ' q '){ printf("请输入命令\ n plus \ n-MINUS \ n * times \ n/divide \ NQ退出\ n ");c = getchar();getchar();开关(c){情况‘q’:断开;case“”:printf("请输入第一个加数\ n ");获取(a);Printf("请输入第二个加数\ n ");gets(b);Printf ("sum是%s ",add(a,b));getchar();打破;Case'-':printf("请输入被减数\ n ");获取(a);Printf("请输入减法\ n ");gets(b);Printf("差为%s ",sub(a,b));getchar();打破;Case' *': printf("请输入第一个乘数\ n ");获取(a);Printf("请输入第二个乘数\ n ");gets(b);Printf("产品是%s ",mul(a,b));getchar();打破;Case'/':printf("请输入股息\ n ");获取(a);Printf("请输入一个除数\ n ");gets(b);div(a,b);Printf("商是%s,余数是%s ",a,b);getchar();打破;默认:break} }}

编译环境VC6,控制台程序

c语言程序设计2的64次方 # includestdio.h

int lenth = 0;//lenth是数组中数据的位数。

无效程(字符数)

{

int I;

for(I = 0;伊伦思;I) //从最低值开始判断数组中的数字,如果不是0,*2,则逐级相乘。

{

num * = 2;

}

for(I = 0;伊伦思;I) //如果低位> 10,则前移。

如果(num9)

{

num-= 10;

num[I 1];

}

if(num[lenth]!=0) //判断数组中的位数是否因为上面的进位而增加了,如果增加了就lenth 1。

lenth

}

void main()

{

字符编号[25];//把结果当成一个数组,就不会越界了。

int I;

for(I = 0;i25I) //赋值初始值=0。

num = 0;

num[0]= 2;//第一次运算的结果是2=2的一次幂。

lenth = 1;

for(I = 0;i63I) //做64次方运算。

程(小水);

for(I = 24;I = 0;I-)//输出结果。

printf("%d ",num);

getch();

}

如何用C语言求2的64次方? 使用循环语句,定义一个乘法变量和一个控制循环变量。

我刚刚写了这个。

# includestdio.h

void main()

{

int I = 1;//i控制循环

双s = 1.0//s是乘法的乘积。

for(;i = 64我)

s * = 2;

printf("%e ",s);

}

s定义为double类型,以便用%e输出,即以指数形式输出。

相关文章

发表新评论