C 高精度的加法與乘法

2021-09-27 07:32:58 字數 2462 閱讀 1891

什麼是高精度運算?

實際上高精度就是說參與運算的資料和運算結果的範圍,超出標準資料型別能表示的資料大小範圍的運算。這個時候,如果要得到正確的計算結果,顯然不能依靠普通方法實現了。而要在普通運算原理的基礎上,加以輔助演算法來實現超大資料的計算。例如:求兩個100位的資料的和,或者計算兩個100位的數字乘積。這時就要用到高精度演算法了。

高精加:

思緒

既然運算數超過了資料大小範圍,我們選擇用陣列儲存數字

將陣列逆序儲存,這樣便於加法的運算

再將運算完成後的陣列逆序列印(這樣看起來就是順序的)

**如下:

#define _crt_secure_no_warnings

#include

#include

#include

//結構體重命名

typedef

struct

highacc;

//逆序陣列並將字元轉化為數字

void

dealnumber

(highacc *h)

}//高精度加法

highacc add

(highacc m_num1, highacc m_num2)

;int i, tmp;

//儲存更長陣列的長度

int maxlen = m_num1.len >= m_num2.len ? m_num1.len : m_num2.len;

for(i =

0; i < maxlen; i++

) sum.len = maxlen + sum.data[maxlen]

;//得到sum 的長度

return sum;

}//陣列再逆序列印

void

printnumber

(highacc h)

}int

main()

; highacc num2 =

; highacc sum;

scanf

("%s%s"

, num1.data, num2.data)

;dealnumber

(&num1)

;dealnumber

(&num2)

; sum =

add(num1, num2)

;printnumber

(sum)

;putchar

('\n');

system

("pause");

return0;

}

高精乘:

高精乘的實現原理:

**如下:

#define _crt_secure_no_warnings

#include

#include

#include

//結構體重命名

typedef

struct

highacc;

//數字逆序儲存(陣列從左到右乘)

void

dealnumber

(highacc *h)

}//數子再逆序列印(看起來就是順序)

void

printnumber

(highacc h)

}//高精乘演算法

highacc mul

(highacc m_num1, highacc m_num2)

;int i, j, tmp;

//如果兩者中有乙個為0直接返回0if(

(m_num1.len ==

1&& m_num1.data[0]

==0)||

(m_num2.len ==

1&& m_num2.data[0]

==0))

//高精乘演算法核心

for(i =

0; i < m_num1.len; i++)}

sum.len = m_num1.len + m_num2.len -

!sum.data[m_num1.len + m_num2.len -1]

;//得到sum 的長度

return sum;

}int

main()

; highacc num2 =

; highacc sum;

scanf

("%s%s"

, num1.data, num2.data)

;dealnumber

(&num1)

;dealnumber

(&num2)

; sum =

mul(num1, num2)

;printnumber

(sum)

;putchar

('\n');

system

("pause");

return0;

}

高精度加法和高精度乘法

題目描述 谷學長有乙個非常簡單的問題給你,給你兩個整數a和b,你的任務是計算a b。輸入 輸入的第一行包含乙個整數t t 20 表示測試例項的個數,然後2 t行,分別表示a和b兩個正整數。注意整數非常大,那意味著你不能用32位整數來處理。你可以確定的是整數的長度不超過1000。輸出 對於每乙個樣例,...

高精度加法和乘法

今天偶然看了一下某大神的模板,不經意翻到這個就順便 借 了一下 上 吧 date 2015 8 21 晚上 author itak motto 今日的我要超越昨日的我,明日的我要勝過今日的我 以創作出更好的 為目標,不斷地超越自己。include include include using name...

高精度加法和乘法

今天偶然看了一下某大神的模板,不經意翻到這個就順便 借 了一下 上 吧 date 2015 8 21 晚上 author itak motto 今日的我要超越昨日的我,明日的我要勝過今日的我 以創作出更好的 為目標,不斷地超越自己。include include include using name...