C 高精度減法運算(a a b)

2021-09-09 07:34:05 字數 1552 閱讀 2547

一、題目

求兩個大的正整數相減的差。

二、思路

1.接收輸入的兩個大整數的數字串:

用string接收兩個正整數的數字串(c用字元陣列或字元指標);

2.比較兩個正整數哪個大?

(1)比較兩個大整數的數字串長度;

(2)如果長度相等,可用strcmp函式比較兩個數字串,標頭檔案為:#include ;

如果是第乙個數大於或等於第二個數,那差是非負整數;否則為負數,負數要輸出符號「-」,同時交換兩個

數字串:讓較大的數字串是第乙個數,較小的為第二個數

3.將兩個大整數的數字串分別存放在整型陣列a和b中:從低位往高位存放

a存放較大的數,b存放較小的數

4.然後,從低位往高位進行相減,不夠的從高位借位;

a = a - b;

5.最後輸出結果。

三、實現程式

#include #include using namespace std;

const int max = 5000;

typedef int arr[max]; // 使用別名

bool islarge(string str1, string str2, int la, int lb); // 比較兩個數字串的大小

void tominus(arr a, arr b, int &la, int lb); // 將兩個高精度數相減 a = a - b

int main(int argc, const char * ar**)

// 清零

memset(a, 0, sizeof(a));

memset(b, 0, sizeof(b));

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

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

tominus(a, b, la, lb); // 呼叫求差函式

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

cout << a[la - i - 1];

cout << endl;

}return 0;

}// 比較兩個數字串的大小,如果第乙個數小於第二個數,就返回true並交換兩個數字串。

bool islarge(string str1, string str2, int la, int lb)

if(str1[la-1] < str2[lb-1]) // 如果第乙個小於第二個,返回真

return true;

}return false;

}// 將兩個高精度數相減 a = a - b; 返回la的長度

void tominus(arr a, arr b, int &la, int lb)

a[i] = a[i] - b[i]; // 計算出差的第i位

}while(la > 1 && a[la-1] == 0) // 從高位往低位走,直到不為0

la--;

}

測試結果:

C 高精度加法運算(a a b)

一 為什麼要高精度計算 利用計算機進行數值計算,有時計算要求精度高,希望計算的數的位數達到上百或者上千,甚至更多。但是由於計算機硬體問題,往往達不到實際問題所要求的精度。二 思路 1.考慮如何接收輸入的大整數 用string 字串 操作 2.如何儲存大整數 1 用整型陣列,每個單元儲存乙個數字的數字...

模擬 高精度減法運算

基本思路 高精度減法與高精度加法的步驟基本一樣,都是對齊位數,然後開始減。不過會遇到很多小細節,需要做好 sub a,b 如果ab 減法運算,基本的借位思想要注意 如果a的位數大於b,那麼我這裡會補充前導0給b,從而方便進行對齊位數的減法 輸出結果時,前導0的刪除操作思考如何判斷輸入的字串之間的大小...

高精度運算 加法 減法

高精度算是我高中期間沒有學明白的知識點之一,其實挺簡單的東西。核心思路是 按位模擬豎式運算 說白了就是模擬題。加法減法從低位到高位模擬,因為會進製借位 乘法也從低到高因為進製 除法要從高到低因為我們手算除法時也是從高到低保留餘數的。高精度減法 1 include2 using namespace s...