什麼是高精度運算?
實際上高精度就是說參與運算的資料和運算結果的範圍,超出標準資料型別能表示的資料大小範圍的運算。這個時候,如果要得到正確的計算結果,顯然不能依靠普通方法實現了。而要在普通運算原理的基礎上,加以輔助演算法來實現超大資料的計算。例如:求兩個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...