高精度加减乘法运算

高精度,就是利用数组存放数字,每个元素存放一个数字,这样就可以实现对一些较大的数字进行运算

加法------进位

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; 
int main()
{
 char a1[100],b1[100]; 
 int a[100],b[100],c[100],lena,lenb,lenc,i,x;
 memset(a,0,sizeof(a));
 memset(b,0,sizeof(b));
 memset(c,0,sizeof(c)); 
 scanf("%s",a1);
 getchar();
 scanf("%s",b1);
 lena=strlen(a1);
 lenb=strlen(b1); 
 for(i=0;i<=lena-1;i++) a[lena-i]=a1[i]-48; 
 for(i=0;i<=lenb-1;i++) b[lenb-i]=b1[i]-48; 
 lenc=1;
 x=0;
 while(lenc<=lena||lenc <=lenb)
 {
  c[lenc]=a[lenc]+b[lenc]+x;//两数相加
  x=c[lenc]/10;
  c[lenc]%=10;
  lenc++;
 }
 c[lenc]=x;
 if(c[lenc]==0)
  lenc--;//处理最高进位
 for(i=lenc;i>=1;i--)
 cout<<c[i];//输出结果
 cout<<endl;
 return 0;
} 
 

减法-------借位

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std; 
int main()
{
 int a[256],b[256],c[256],lena,lenb,lenc,i; 
 char n[256],n1[256],n2[256]; 
 memset(a,0,sizeof(a));
 memset(b,0,sizeof(b));
 memset(c,0,sizeof(c));
 printf("Input minuend:");
 scanf("%s",n1);//输入被减数
 printf("input subtrahend:");
 scanf("%s",n2);//输入减数
 if(strlen(n1)<strlen(n2)||(strlen(n1)==strlen(n2)&&strcmp(n1,n2)<0))
 //strcmp()为字符串比较函数,当n1==n2,返回0;
 //ni>n2时,返回正整数;n1<n2时,返回负整数
 //处理被减数和减数,交换被减数和减数
 {
  strcpy(n,n1);//将n1数组的值完全赋值给n数组
  strcpy(n1,n2);
  strcpy(n2,n);
  cout<<"-";
 }//交换了减数和被减数,结果为负数
 lena=strlen(n1);
 lenb=strlen(n2);
 for(i=0;i<=lena-1;i++)
 a[lena-i]=int(n1[i]-'0');//被减数放入a数组
 for(i=0;i<=lenb-1;i++)
 b[lenb-i]=int(n2[i]-'0');//减数放入b数组
 i=1;
 while(i<=lena||i<=lenb)
 {
  if(a[i]<b[i])
  {
   a[i]+=10;//不够减,那么向高位借1当10
   a[i+1]--;
  }
  c[i]=a[i]-b[i];//对应位相减
  i++;
 }
 lenc=i;
 while((c[lenc]==0)&&(lenc>1))
 lenc--;//最高位的0不输出
 for(i=lenc;i>=1;i--)
 cout<<c[i];//输出结果
 cout<<endl; 
 return 0;
}

乘法-----进位

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std; 
int main()
{
 char a1[100],b1[100];
 int a[100],b[100],c[100],lena,lenb,lenc,i,j,x;
 memset(a,0,sizeof(a));
 memset(b,0,sizeof(b));
 memset(c,0,sizeof(c));
 scanf("%s",a1);
 getchar();
 scanf("%s",b1);
 lena=strlen(a1);
 lenb=strlen(b1);
 for(i=0;i<lena;i++)
 {
  a[lena-i]=int(a1[i]-'0');
 }
 for(i=0;i<lenb;i++)
 {
  b[lenb-i]=int(b1[i]-'0');
 }
 for(i=1;i<=lena;i++)
 {
  x=0;
  for(j=1;j<=lenb;j++)
  {
   c[i+j-1]=a[i]*b[j]+x+c[i+j-1];
   x=c[i+j-1]/10;
   c[i+j-1]%=10;
  }
  c[i+lenb]=x;
 }
 lenc=lena+lenb;
 while(c[lenc]==0&&lenc>1)
 {
  lenc--;
 }
 for(i=lenc;i>=1;i--)
 {
  cout<<c[i];
 }
 cout<<endl;
 return 0;
}
发布了37 篇原创文章 · 获赞 3 · 访问量 1181

猜你喜欢

转载自blog.csdn.net/qq_45721778/article/details/104578243