生活随笔
收集整理的這篇文章主要介紹了
大整数减法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本篇介紹大整數相減(兩個正數相減)
與大整數加法運算相比,減法運算稍微復雜了些,因為要考慮當結果為負數時候的情況。根據減法運算法則可以得出兩個整數相減為正數的情況。這樣想來,只需要在兩個正的大整數相減前比較大小即可得出另外一種情況。
例:
- 11 - 20 = - ( 20 - 11)只需算出 20 - 11 即可獲得答案
- 為了確定最終結果得符號(+ / -),需要比較兩個數得大小
所以最終功能的實現由以下部分組成:
逆序存放數字(對齊整數的個位,便于計算)判斷兩個整數大小(確定最終結果為正數還是負數)用數組計算結果根據兩個整數的大小輸出結果
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
void swap(int a[], int len_a, int b[], int len_b)
{int MAX = max(len_a, len_b);for (int i = 0; i < MAX; i++){swap(a[i], b[i]);}
}
int main()
{int a[1001] = { 0 };int b[1001] = { 0 };string A, B;cin >> A >> B;int len1, len2;len1 = A.length();len2 = B.length();int flag = 0;//標記輸出結果為正或是負for (int i = len1 - 1, k = 0; i != -1; i--)//逆序存放{a[k] = A[i] - '0';k++;}for (int i = len2 - 1, k = 0; i != -1; i--){b[k] = B[i] - '0';k++;}if (len1 < len2)//比較大小{flag = 1;swap(a, len1, b, len2);swap(len1, len2);}else if (len1 == len2){for (int i = len1 - 1; i >= 0; i--){if (a[i] == b[i])continue;else if (a[i] > b[i])break;else{flag = 1;swap(a, len1, b, len2);swap(len1, len2);break;}}}int down = 0,max = len1 >= len2 ? len1 : len2;for (int i = 0; i < max; i++)//模擬減法{a[i] =a[i] - b[i] - down;down = 0;if (a[i] < 0){down = 1;a[i] += 10;}}if (flag){cout << "-";}int i;for (i = max - 1; a[i] == 0; i--);//忽略空格for (;i >= 0; i--){cout << a[i];}return 0;
}
總結
以上是生活随笔為你收集整理的大整数减法的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。