高精除高精,结果第一步就没了 高精度减法程序不能用了! 我的高精度减法程序:
#include <bits/stdc++.h>
using namespace std;
string x,y;
int a[1000001],b[1000001],c[1000001],t[1000001],lent;
int main()
{
long long i,j,k,l,p=0,lena,lenb,len;
cin>>x;
cin>>y;
for(i=0;i<x.size();i++) a[i+1]=x[i]-'0';
for(j=0;j<y.size();j++) b[j+1]=y[j]-'0';
lena=i;lenb=j;
len=max(lena,lenb);
bool s=false;
if(lena<lenb) s=true;
else if(lena==lenb)
{
i=1;
while(a[i]==b[i]&&i<=len)
{
i++;
}
if(b[i]==a[i])
{
cout<<0;
return 0;
}
if(b[i]>a[i]) s=true;
}
if(s)
{
for(i=1;i<=lena;i++)
{
t[i]=a[i];
}
for(i=1;i<=lenb;i++)
{
a[i]=b[i];
}
for(i=1;i<=lena;i++)
{
b[i]=t[i];
}
lent=lena;
lena=lenb;
lenb=lent;
}
if(lena<len)
{
l=len;
a[len]=a[lena];
a[lena]=0;
for(k=lena-1;k>=1;k--)
{
a[l-1]=a[k];
a[k]=0;
l--;
}
}
if(lenb<len)
{
l=len;
b[len]=b[lenb];
b[lenb]=0;
for(k=lenb-1;k>=1;k--)
{
b[l-1]=b[k];
b[k]=0;
l--;
}
}
for(i=len;i>=1;i--)
{
if(a[i]<b[i])
{
a[i-1]--;
a[i]+=10;
}
c[i]=a[i]-b[i];
}
if(s) cout<<"-";
bool z=false;
for(i=1;i<=len;i++)
{
if(z||c[i]!=0)
{
cout<<c[i];
z=true;
}
}
return 0;
}
我已经废掉的高精度除法:
#include <bits/stdc++.h>
using namespace std;
string SUB (string x,string y);
int main()
{
cout<<SUB("10000","10");
}
string SUB (string x,string y)
{
string ans;
int a[1000001],b[1000001],c[1000001],t[1000001];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
memset(t,0,sizeof(t));
long long i,j,k,l,p=0,lena,lenb,len,lent;
for(i=0;i<x.size();i++) a[i+1]=x[i]-'0';
for(j=0;j<y.size();j++) b[j+1]=y[j]-'0';
lena=i;lenb=j;
len=max(lena,lenb);
bool s=false;
if(lena<lenb) s=true;
else if(lena==lenb)
{
i=1;
while(a[i]==b[i]&&i<=len)
{
i++;
}
if(b[i]==a[i])
{
cout<<0;
return 0;
}
if(b[i]>a[i]) s=true;
}
if(s)
{
for(i=1;i<=lena;i++)
{
t[i]=a[i];
}
for(i=1;i<=lenb;i++)
{
a[i]=b[i];
}
for(i=1;i<=lena;i++)
{
b[i]=t[i];
}
lent=lena;
lena=lenb;
lenb=lent;
}
if(lena<len)
{
l=len;
a[len]=a[lena];
a[lena]=0;
for(k=lena-1;k>=1;k--)
{
a[l-1]=a[k];
a[k]=0;
l--;
}
}
if(lenb<len)
{
l=len;
b[len]=b[lenb];
b[lenb]=0;
for(k=lenb-1;k>=1;k--)
{
b[l-1]=b[k];
b[k]=0;
l--;
}
}
for(i=len;i>=1;i--)
{
if(a[i]<b[i])
{
a[i-1]--;
a[i]+=10;
}
c[i]=a[i]-b[i];
}
if(s) ans+="-";
bool z=false;
for(i=1;i<=len;i++)
{
if(z||c[i]!=0)
{
ans+=c[i]+'0';
z=true;
}
}
return ans;
}
直接死循环——(10000和10用于测试) 救命呀救命呀