c语言简单乘法计算器,c语言实现连续整数加减计算器

首页 > 实用技巧 > 作者:YD1662023-11-28 15:41:37

乘法运算是数学中的一种简单运算,我们在小学的时候常常用竖式乘法的计算方法去计算乘法。对于一些比较大的数字时,通常采用计数器的方法去计算,然而对于一些普通的手机计算器来说,往往只能计算不超过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语言实现连续整数加减计算器(1)

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

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

c语言简单乘法计算器,c语言实现连续整数加减计算器(2)

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

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

c语言简单乘法计算器,c语言实现连续整数加减计算器(3)

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

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

c语言简单乘法计算器,c语言实现连续整数加减计算器(4)

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

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

c语言简单乘法计算器,c语言实现连续整数加减计算器(5)

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);

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);

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;

}

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.