筆記 高精度

2021-08-01 11:01:41 字數 4242 閱讀 4658

總結:

關於高精度的計算 大體是乙個套路

模擬小學所學的計算過程(豎式計算)

然後注意:1.進製 2.排除前導零

2的乘方

#include

#include

#include

#include

#include

using

namespace

std;

int a[3010],b[3010],ans[10000];

int main()

int i=1;

while(a[i]>10)

n--;

}for(int j=wei;j>=1;j--)

高精加法

#include

#include

#include

#include

#include

using

namespace

std;

char s[3010];

char t[3010];

int a[3010],b[3010];

int main()

if(a[len+1]>0) len++;

while(a[len]==0&&len>1) len--;

for(int i=len;i>=1;i--) cout

0;}

高精減法

#include

#include

#include

#include

#include

using

namespace

std;

char s[3010];

char t[3010];

int a[3010],b[3010];

int main()

a[i]-=b[i];

}while(a[la]==0&&la>1) la--;

for(int i=la;i>=1;i--) cout

b[i]-=a[i];

}while(b[lb]==0&&lb>1) lb--;

for(int i=lb;i>=1;i--) cout

0;}

實數加法

#include

#include

#include

#include

#include

using

namespace

std;

char s[3010];

char t[3010];

int a[3010],b[3010];

int c[3010],d[3010];

int main()

for(int i=1;i<=lb;i++)

//for(int i=len;i>=1;i--) cout//for(int i=lenb+1;i<=lb-1;i++) d[i-lenb]=t[i]-48;

int lla=la-lena-1;

int llb=lb-lenb-1;

int llen=max(lla,llb);

for(int i=llen+lena;i>=lena+1;i--)

for(int i=llen+lenb;i>=lenb+1;i--)

for(int i=1;i<=llen;i++) c[i]+=d[i];

for(int i=1;i<=llen;i++)

if(c[llen+1]>0) flag=1;

int p=1;

while(c[p]==0)

len=max(lena,lenb);

for(int i=0;i<=lena-1;i++) a[lena-i]=s[i]-48;

for(int i=0;i<=lenb-1;i++) b[lenb-i]=t[i]-48;

if(flag==1) a[1]++;

for(int i=1;i<=len;i++) a[i]+=b[i];

for(int i=1;i<=len;i++)

if(a[len+1]>0) len++;

while(a[len]==0&&len>1) len--;

//for(int i=llen;i>=p;i--)

// cout=1;i--) cout

<<".";

for(int i=llen;i>=p;i--) cout

0;}

高精度乘單精度

#include

#include

#include

#include

#include

using

namespace

std;

int a[3010];

char b[3010];

int main()

for(int i=0;i<=len-1;i++) a[i]*=n;

for(int i=0;i<=len-1;i++)

int t=a[len];

while(t>0)

while(a[len]==0&&len>1) len--;

for(int i=len-1;i>=0;i--)

高精度乘高精度

#include

#include

#include

#include

using

namespace

std;

int a[1000],b[1000],c[1000],d[1000];

char s[1000],t[1000];

int la,lb,len;

bool judge()

return

true;

}void jian()

d[i]-=b[i];

}}void cheng()

int t=d[len+1];

while(t>0)

}int main()

cheng();

}while(c[len]==0&&len>1)len--;

for(int i=len;i>=1;i--) cout

0; }

高精度除單精度

#include

#include

#include

#include

#include

using

namespace

std;

char s[3010];

char t[3010];

int a[3010],b[3010],c[3010];

int main()

while(b[len]==0&&len>1) len--;

for(int i=len;i>=1;i--)

高精度除高精度(最難)

#include

#include

#include

#include

using

namespace

std;

int a[1000],b[1000],c[1000],d[1000];

char s[1000],t[1000];

int la,lb,len;

bool judge()//判斷大小的函式

return

true;

}void jian()//高精度減法

d[i]-=b[i];

}}void cheng()//高精度乘法 乘10(做除法時的計算)

int t=d[len+1];

while(t>0)

}int main()

cheng();

}while(c[len]==0&&len>1)len--;

for(int i=len;i>=1;i--) cout

0; }

高精度除法(高精度除以高精度)

先貼乙個簡單的高精度除以單精度的 include include include using namespace std int main else ys ys 10 a i 0 while c i 0 i for int j i j 0 j printf d c j if ys printf d ...

高精度除高精度

演算法流程 第一步,讀入被除數 a 和 除數 b,判斷是否 a b,是則輸出 0 並結束演算法,否則令 answer 0 第二步,令餘數 remainder 0,令 i 從被除數最高位的下標開始 第三步,令 remainder remainder 10 a i 令 c 9 第四步,判斷是否 b c ...

高精度除以高精度

原 題 高精除以高精,求它們的商和餘數。演算法分析 高精除以高精是用減法模擬除法,對被除數的每一位都減去除數,一直減到當前位置的數字 包括前面的餘數 小於除數 由於每一位的數字小於10,所以對於每一位最多進行10次計算 代 碼 include include include using namesp...