算法高精四则运算
Posted brokenstring
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法高精四则运算相关的知识,希望对你有一定的参考价值。
高精度加法
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char a[200],b[200];
int a1[200],b1[200],c1[200];
int l1,l2,l3;
int main()
{
scanf("%s",a);
scanf("%s",b);
l1=strlen(a);
l2=strlen(b);
for(int i=0;i<=strlen(a)-1;i++)
a1[l1-i]=a[i]-48;
for(int i=0;i<=strlen(b)-1;i++)
b1[l2-i]=b[i]-48;
int k=0;
l3=1;
while(l3<=l1||l3<=l2)
{
c1[l3]=a1[l3]+b1[l3]+k;
k=c1[l3]/10;
c1[l3]%=10;
l3++;
}
c1[l3]=k;
if(c1[l3]==0)
l3--;
for(int i=l3;i>=1;i--)
cout<<c1[i];
}
高精度减法(只支持两个正整数)
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char a[200],b[200],n[200];
int a1[200],b1[200],c1[200];
int l1,l2,l3;
int main()
{
scanf("%s",a);
scanf("%s",b);
if(strlen(a)<strlen(b)||(strlen(a)==strlen(b)&&strcmp(a,b)<0))
{
strcpy(n,a);
strcpy(a,b);
strcpy(b,n);
cout<<"-";
}
l1=strlen(a);
l2=strlen(b);
for(int i=0;i<=strlen(a)-1;i++)
a1[l1-i]=a[i]-48;
for(int i=0;i<=strlen(b)-1;i++)
b1[l2-i]=b[i]-48;
l3=1;
while(l3<=l1||l3<=l2)
{
if(a1[l3]<b1[l3])
{
a1[l3]+=10;
a1[l3+1]--;
}
c1[l3]=a1[l3]-b1[l3];
l3++;
}
while((c1[l3]==0)&&l3>1)
l3--;
for(int i=l3;i>=1;i--)
cout<<c1[i];
}
高精度乘法
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
char a[2002],b[2002];
int a1[2002],b1[2002],c1[4040];
int l1,l2,l3;
int k;
int main()
{
scanf("%s",a);
scanf("%s",b);
l1=strlen(a);
l2=strlen(b);
for(int i=0;i<=l1-1;i++)
a1[l1-i]=a[i]-48;
for(int i=0;i<=l2-1;i++)
b1[l2-i]=b[i]-48;
for(int i=1;i<=l1;i++)
{
k=0;
for(int j=1;j<=l2;j++)
{
c1[i+j-1]=c1[i+j-1]+k+a1[i]*b1[j];
k=c1[i+j-1]/10;
c1[i+j-1]%=10;
}
c1[l2+i]=k;
}
l3=l1+l2;
while(l3>1&&c1[l3]==0)
l3--;
for(int i=l3;i>=1;i--)
cout<<c1[i];
}
高精度除法(高精除以高精)
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[200],b[200],c[200],tem[200];
void intt (int a[])
{
string s;
cin>>s;
a[0]=s.length();
for(int i=1;i<=a[0];i++)
a[i]=s[a[0]-i]-48;
}
void print(int a[])
{
if(a[0]==0)
{
cout<<0<<endl;
return;
}
for(int i=a[0];i>=1;i--)
cout<<a[i];
cout<<endl;
}
int compare(int a[],int b[])
{
if(a[0]>b[0])
return 1;
if(a[0]<b[0])
return -1;
for(int i=a[0];i>=1;i--)
{
if(a[i]>b[i])
return 1;
if(a[i]<b[i])
return -1;
}
return 0;
}
int charu(int b[],int tem[],int k)
{
for(int i=1;i<=b[0];i++)
tem[i+k-1]=b[i];
tem[0]=b[0]+k-1;
}
void jian(int a[],int b[])
{
int flag;
flag=compare(a,b);
if(flag==0)
{
a[0]=0;
return;
}
if(flag==1)
{
for(int i=1;i<=a[0];i++)
{
if(a[i]<b[i])
{
a[i]+=10;
a[i+1]-=1;
}
a[i]=a[i]-b[i];
}
while(a[0]>0&&a[a[0]]==0)
a[0]--;
}
}
void chufa(int a[],int b[],int c[])
{
c[0]=a[0]-b[0]+1;
for(int i=c[0];i>=1;i--)
{
memset(tem,0,sizeof(tem));
charu(b,tem,i);
while(compare(a,tem)>=0)
{
c[i]++;
jian(a,tem);
}
}
while(c[0]>0&&c[c[0]]==0)
c[0]--;
}
int main()
{
intt(a);
intt(b);
chufa(a,b,c);
print(a);
print(c);
}
高精度除法(高精除以低精)
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a1[20001],b1[20001];
char a[20001];
int l1,l2,x=0,b;
int main()
{
scanf("%s",a);
l1=strlen(a);
cin>>b;
for(int i=0;i<=l1-1;i++)
a1[i+1]=a[i]-48;
l2=1;
for(int i=1;i<=l1;i++)
{
b1[i]=(10*x+a1[i])/b;
x=(x*10+a1[i])%b;
}
while(b1[l2]==0&&l2<l1)
l2++;
for(int i=l2;i<=l1;i++)
cout<<b1[i];
}
以上是关于算法高精四则运算的主要内容,如果未能解决你的问题,请参考以下文章