c语言大整数运算_c语言由什么组成

c语言大整数运算_c语言由什么组成乘法运算是数学中的一种简单运算,我们在小学的时候常常用竖式乘法的计算方法去计算乘法。对于一些比较大的数字时,通常采用计数器的方法去计算,然而对于一些普通的手机计算器来说,往往只能计算不超过16位数字的乘法。那如何能计算超大

乘法运算是数学中的一种简单运算,我们在小学的时候常常用竖式乘法的计算方法去计算乘法。对于一些比较大的数字时,通常采用计数器的方法去计算,然而对于一些普通的手机计算器来说,往往只能计算不超过16位数字的乘法。那如何能计算超大正整数的乘法?这是我们需要解决的问题。接下来,我将通过一个简单的例子去展示一种新的整数乘法运算方法

对于326X36这个乘法例子来说,可以通过以下步骤进行计算。

第一步,对要相乘的数字进行“取反”,即326变成623,36变成63。

第二步,对位数较少的数进行补0使得两个数的位数相同,即63的位数比623的位数少1,所以需要在63后面补1位0,变成630,使得他们位数相同都是3。

第三步,对于n位的整数和m位的整数相乘,往往得到的结果的位数为n+m位或n+m-1位,所以326X36的结果为4位数或5位数,然后我们把结果的每一位数字都计算出来,就可以得到结果了。

326X36结果的第一位数(即个位)计算方法如下:

c语言大整数运算_c语言由什么组成

6X6=36,36除以10的余数为6,整数部分为3,所以326X36的个位为余数6,同时向十位进位,进位数C=3。

326X36结果的第二位数(即十位)的计算方法:

c语言大整数运算_c语言由什么组成

6X3+2X6+C=30+3=33,33除以10的余数为3,整数部分为3,所以326X36结果的十位为余数3,向百位的进位C=3。

326X36结果的第三位数(即百位)的计算方法:

c语言大整数运算_c语言由什么组成

6X0+2X3+3X6+C=24+3=27,27除以10的余数为7,整数部分为2,所以326X36结果的百位为余数7,进位C的值为整数部分2,即C=2。

326X36结果的第四位数(即千位)的计算方法:

c语言大整数运算_c语言由什么组成

2X0+3X3+C=9+2=11,11除以10的余数为1,整数部分为1,所以326X36结果的千位为余数1,进位C=1。

326X36结果的第五位数(即万位)的计算方法:

c语言大整数运算_c语言由什么组成

3X0+C=0+1=1,1除以10的余数为1,整数部分为0,所以326X36结果的万位为余数1,进位为0。

因为326X36结果的最大位数为5位数,所以只需要计算5步就可以得到结果。根据上面的5次计算,可以得到326X36的结果为11736。易验证该结果是正确的。

C语言程序:

#include<stdio.h>

#include<string.h>

void fanz(char *p) //将p中的素取反,例如,p:1234变为p:4321

{

int i,length,n;

char s;

length=strlen(p); //计算p的长度

n=length/2;

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

{

s=*(p+i);

*(p+i)=*(p+length-i-1);

*(p+length-i-1)=s;

}

}

void product(char *p,char *q)

{

int shu[1000];

//shu[]用来存放大整数p和q相乘结果的每一位数字。例如,p*q=12345,则shu[]={5,4,3,2,1}

int n,n1,n2,len,m,sum=0,x,y,cy=0,i,j,M;

n1=strlen(p); //计算p的长度

n2=strlen(q); //计算q的长度

//n=n1+n2;

//n值为p和q相乘结果能达到的最大位数,例如,x位的数乘以y位的数得到的结果的位数是x+y-1位或x+y位

fanz(p); //将p中的素取反

fanz(q); //将q中的素取反

if(n1>n2) //P的长度大于q的长度时

{

for(i=n2;i<n1;i++)

*(q+i)=’0′; //在q后面加入字符’0’,使得q与p长度相等

n=2*n1-1;

}

else n=n1+n2;

len=strlen(p);

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

{

if(i<len)

{

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

{

x=(int)*(p+i-j)-48;

y=(int)*(q+j)-48;

sum=sum+x*y;

}

m=(sum+cy)%10;

cy=(sum+cy)/10;

sum=0;

shu[i]=m;

}

else

{

M=i-len;

for(j=i-len+1;j<len;j++)

{

x=(int)*(p+len-j+M)-48;

y=(int)*(q+j)-48;

sum=sum+x*y;

}

if((i-len+1)==len)

shu[i]=cy;

m=(sum+cy)%10;

cy=(sum+cy)/10;

sum=0;

shu[i]=m;

}

}

if(shu[n-1]!=0)

printf(“%d”,shu[n-1]);

for(i=n-2;i>=0;i–)

printf(“%d”,shu[i]);

}

int main()

{

char s1[500],s2[500];

printf(“请输入不超过500位的大整数X:”);

scanf(“%s”,s1);

printf(“请输入不超过500位的大整数Y:”);

scanf(“%s”,s2);

printf(“X*Y=”);

if(strlen(s1)<strlen(s2))

product(s2,s1);

else product(s1,s2);

printf(“\n”);

return 0;

}

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/16421.html

(0)
上一篇 2024年 9月 17日
下一篇 2024年 9月 17日

相关推荐

关注微信