关于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输出,即以指数形式输出。
最后更新于 2023-10-09 02:37:16 并被添加「」标签,已有 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
相关文章