【考前復習__各類模板之高精度】 -开发者知识库

【考前復習__各類模板之高精度】 -开发者知识库,第1张

一、高精度數的輸入輸出

    char ci[maxn],cj[maxn];
scanf(
"%s",ci 1);
scanf(
"%s",cj 1);
int len1=strlen(ci 1);
int len2=strlen(cj 1);
a.w[
0]=len1;
for (int i=1;i<=len1;i )
a.w[i]
=ci[len1-i 1]-'0';//反着記錄
b.w[0]=len2;
for (int i=1;i<=len2;i )
b.w[i]
=cj[len2-i 1]-'0';

二、高精度 高精度

hp jia(hp a,hp b)
{
hp c;
if (a.w[0]>b.w[0]) c.w[0]=a.w[0] 1;
else c.w[0]=b.w[0] 1;
for (int i=1;i<=c.w[0];i ) c.w[i]=0;
for (int i=1;i<c.w[0];i )//< not <=
{
c.w[i]
=a.w[i] b.w[i];// =
c.w[i 1] =c.w[i]/10;// =
c.w[i]=c.w[i]%10;
}
while (c.w[0]!=0&&c.w[c.w[0]]==0) c.w[0]--;
return c;
}

三、高精度-高精度

1、判斷正負

bool bj(hp a,hp b)
{
if (a.w[0]<b.w[0]) return false;
for (int i=1;i<=a.w[0];i )
if (b.w[0]>a.w[0]) return false;
return true;
}
if (bj(a,b)) x=jian(a,b);
else {
cout
<<"-";
x
=jian(b,a);
}

2、減法

hp jian(hp a,hp b)
{
hp c;
c.w[
0]=a.w[0];
for(int i=1;i<=c.w[0];i ) c.w[i]=0;
for (int i=1;i<=c.w[0];i )
{
if (a.w[i]<b.w[i]){
a.w[i]
=10;
a.w[i
1]--;
}
c.w[i]
=a.w[i]-b.w[i];
}
while (c.w[0]>0&&c.w[c.w[0]]==0) c.w[0]--;
return c;
}

三、高精度*高精度

hp cheng(hp a,hp b)
{
hp c;
c.w[
0]=a.w[0] b.w[0];
for (int i=1;i<=c.w[0];i ) c.w[i]=0;
for (int i=1;i<=a.w[0];i )
for (int j=1;j<=b.w[0];j )
{
c.w[i
j-1] =a.w[i]*b.w[j];
c.w[i
j] =c.w[i j-1]/10;
c.w[i
j-1]=c.w[i j-1]%10;
}
while (c.w[0]>=1&&c.w[c.w[0]]==0) c.w[0]--;
return c;
}

四、高精度/高精度

1、按位相減 之 numcpy:用456/12,在第一位4的時候/120

void numcpy(hp &t,int id)
{
for (int i=1;i<=b.w[0];i )
t.w[i
id-1]=b.w[i];
t.w[
0]=b.w[0] id-1;
}

2、按位相減:相應位數商 1

hp chu(hp a,hp b)
{
hp c;
c.w[
0]=a.w[0]-b.w[0] 1;
for (int i=1;i<=c.w[0];i ) c.w[i]=0;
for (int i=c.w[0];i>=1;i--)
{
hp tmp;
tmp.w[
0]=b.w[0] i-1;
for (int j=1;j<=tmp.w[0];j ) tmp.w[j]=0;
numcpy(tmp,i);
while (bj(a,tmp)) {
c.w[i]
;jian(a,tmp);
}
}
while (c.w[0]>=1&&c.w[c.w[0]]==0) c.w[0]--;
return c;
}

3、減法的過程(與高精減高精不同,要修改a)

bool bj(hp a,hp b)
{
if (a.w[0]<b.w[0]) return false;
else if (a.w[0]>b.w[0]) return true;
int cnt=0;
for (int i=a.w[0];i>=1;i--)//順序
{
if (a.w[i]>b.w[i]) return true;
if (a.w[i]<b.w[i]) return false;
}
return true;
}
void jian(hp & a,hp b)
{
for (int i=1;i<=b.w[0];i )//b.w[0]
{
if(a.w[i]<b.w[i])
{
a.w[i
1]--;//a.w[i]-- not b
a.w[i] =10;
}
a.w[i]
-=b.w[i];
}
while (a.w[0]>=1&&a.w[a.w[0]]==0) a.w[0]--;//修改a
}

 

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复