高精度計算

2022-07-18 03:09:15 字數 3348 閱讀 4706

**:

高精度的計算包括幾個方面:

1:對資料的訪問

2:對資料的加減乘除(運算)

下面我將用著兩部分來講解:

1:高精度的訪問.

2高精度的運算

1:用字串讀入然後轉換成陣列.

#include #include using namespace std;

const int n=100;//最多100位

int main()

2:直接讀取(這種針對數字本身沒有超界的)

#include using namespace std;

const int n=100;//最多100位

int main()

a[0]=i; //共i位數

return 0;

}

2:高精度的運算:

1比較:

int compare(int a,int b)   //比較a和b的大小關係,若a>b則為1,ab[0]) return 1;//a的位數大於b則a比b大

if (a[0]0;i--) //從高位到低位比較

}

3:高精度減法:

int gminus(int a,int b);//計算a=a-b,返加符號位0:正數 1:負數

//若a=b,則a=0,也可在return前加一句a[0]=1,表示是 1位數0

if(flag==1) //大於

//單獨處理key=0

for(i=1;i<=a[0];i++)a[i]=a[i]*key;//先每位乘起來

for(i=1;i<=a[0];i++) //進製

//注意上一語句退出時i=a[0]+1

while(a[i]>0) //繼續處理超過原a[0]位數的進製,修正a的位數

return 0;

}

高精度除法:演算法:按照從高位到低位的順序,逐位相除。在除到第j位時,該位在接受了來自第j+1位的餘數後與除數相除,如果最高位為零,則商的長度減一。源程式如下(模擬豎式的運算)

#include  #define   n  500

main()

, c[n] = ;

int i, k, d, b;

char a1[n];

printf("input 除數:");

scanf("%d", &b);

printf("input 被除數:");

scanf("%s", a1);

k = strlen(a1);

for(i = 0; i < k; i++) a[i] = a1[k - i - 1] - '0';

d = 0;

for(i = k - 1; i >= 0 ; i--)

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

printf("商=");

for(i = k - 1; i >= 0; i--) printf("%d", c[i]);

printf("\n餘數=%d", d);

}

高精度乘以高精度:演算法:用陣列儲存兩個高精度數,然後逐位相乘,注意考慮進製和總位數。源程式如下:

#include  main()

, b[240] = , c[480] = ;

int i, j, ka, kb, k;

char a1[240], b1[240];

gets(a1);

ka = strlen(a1);

gets(b1);

kb = strlen(b1);

k = ka + kb;

for(i = 0; i < ka; i++) a[i] = a1[ka-i-1] - '0';

for(i = 0; i < kb; i++) b[i] = b1[kb-i-1] - '0';

for(i = 0; i < ka; i++)

for(j = 0; j < kb; j++)

if(!c[k]) k--;

for(i = k-1; i >= 0; i--) printf("%d", c[i]);

}

高精度初一高精度:

#include  #define   n  500

int bj(int a, int b, int k1, int k2) /*比較大小函式*/

else if(a[i] == b[i]) i--;

else

}if(i == 0 && t == 0) flag = 2; /*被除數等於除數返回2*/

}return flag;

}int jf(int a, int b, int k1, int k2) /*減法運算*/

for(i = 0; i < k1; i++)

}return k;

}main()

, b[n] = , c[n] = , d[n] = ;

int i, ka, kb, m, t, t1, t2, k, x, kd, kk;

char a1[n], b1[n];

printf("input 被除數:");

scanf("%s", a1);

ka = strlen(a1);

for(i = 0; i < ka; i++) a[i] = a1[ka - i -1] - '0';

printf("input 除數:");

scanf("%s", b1);

kb = strlen(b1);

for(i = 0; i < kb; i++) b[i] = b1[kb - i -1] - '0';

kd = ka; /*儲存被除數字數 */

t2 = bj(a, b, ka, kb);

m = 0;

doif(t1 > 0)

}}while(t == 1);

if(t2 == 0)

if(t2 == 2)

kk = kd;

while(!c[kd - 1]) kd--;

printf("商 = ");

for(i = kd - 1; i >= 0; i--) printf("%d", c[i]);

while(!a[kk]) kk--;

printf("\n餘數 = ");

if(kk < 0)

for(i = kk; i >= 0; i--) printf("%d", a[i]);

}

高精度計算

最近做了一些高精度計算問題,一般來說解題辦法都差不多,都是通過字串來操作的,下面是解題模板。清零操作 string clearstr string s if s return s 0 while s.length 0 s 0 0 s.erase 0,1 刪除第乙個零 if s return s 0 ...

高精度計算

include include includeusing namespace std const int l 110 string add string a,string b 只限兩個非負整數相加 nb l int la a.size lb b.size for int i 0 ilb la lb ...

高精度計算

一.高精度儲存 1.如對數採用的字串輸入 include include using namespace std const int n 100 最多100位 int main 2.直接讀入 include using namespace std const int n 100 最多100位 int...