【演算法分析】
1.c++不支援大數運算,故而引入高精度演算法。
2.高精度減法將大數以字串形式輸入,然後拆分轉換為一位一位的整數,之後按照小學的豎式運算方法完成編碼。(注意:字串中0下標從左開始,豎式運算中0下標從右開始,故**中需要有乙個逆序操作。如a[i]=s1[s1.length()-i-1]-'0';)
3.高精度減法中需判斷減數、被減數的大小 --> 若s1、s2是string型別,則用s1.compare(s2)來判斷s1、s2大小。若s1、s2是字元陣列,則用strcmp(s1,s2)來判斷s1、s2大小。
4.高精度減法中需交換減數、被減數 --> 若s1、s2是string型別,則再引入乙個字串t,然後用「t=s1;s1=s2;s2=t;」來完成s1、s2的交換。若s1、s2是字元陣列,則再引入乙個字元陣列t,然後用「strcpy(t,s1);strcpy(s1,s2);strcpy(s2,t);」來完成s1、s2的交換。
5.對最高位做判斷,刪除前導0,然後輸出便得結果。如需對例子1235-1233=0002進行前導0的刪除。
【程式**:**於
#include #include using namespace std;
const int n = 1000010;
bool cmp(vector&a, vector&b)
void trimzero(vector&a)
vectorsub(vector&a, vector&b)
trimzero(c);
return c;
}int main()
for (int i = c.size() - 1; i >= 0; i--) cout << c[i];
return 0;}/*
input:
56328123678
958729125679
output:
-902401002001
-----------------------
input:
9876543219
123456789
output:
9753086430
*/
【參考文獻】
高精度減法 C 實現
用於計算含有超過一般變數存放不下的非負整數 高精度加法這個過程是模擬的小學豎式減法計算 原理基本上與高精度加法相同,僅在核心 處有些區別,因此本文較為簡略,建議先閱讀文章 高精度加法 c 實現 因為陣列存放的元素順序與我們計算的順序是相反的,在豎式計算中我們是將其右對齊 個位對個位,十位對十位,以此...
高精度減法 C
仿照豎式減法,先對其,再對應位相減。演算法處理時,先比較大小,用大的減小的,對應位再比較大小,用於作為借位符。include include define maxsize 20 define maxoutsize maxsize 2 using namespace std intmain b max...
高精度減法(c )
每當要進行精度較高的運算時,就要用到高精度。下圖是各個型別的數值範圍 如果想不起各個型別佔多少位元組,可以採用下面的方法 printf d d sizeof int sizeof long long 格式為 sizeof 資料型別 可以把值賦值給乙個變數,也可以直接輸出 好了,回到正點。我們先看例題...