一、題目:兩個大整數相除
輸入兩個大於0的大整數a和b,長度不超過100位,將a/b,輸出得到的商和餘數。
二、思路
1.用字串st1和str2儲存兩個大整數的數字串;
2.將數字串從低位往高位存到整型陣列a和b中;
3.取得大整數a和大整數b的位數la和lb;
4.求商和餘數:
(1) 如果la < lb:
商為0,餘數為大整數a;
(2)如果la >= lb:
lc = la - lb + 1; // 商的位數
用減法模擬除法:求出商的各個數字的值(具體看實現**);
輸出商和餘數。
三、實現程式:
// title:兩個大整數相除
// created by chanjose on 2019/1/20.
// 測試資料:1234567890 213445
#include #include using namespace std;
const int max = 105;
void enlarge(int p, int q, int bits); // 將陣列p中數字串右移bits位
int compare(int a, int b); // 比較大小
void subtract(int a, int b); // 兩個大整數相減
void print(int a); // 輸出
int main(int argc, const char * ar**)
else
}// 去掉高位多餘的0,同時修正c的位數
while(c[0] > 0 && c[c[0]] == 0)
c[0]--;
// 輸出商和餘數
print(c);
cout << " "; // 空格接著輸出餘數
print(a);
cout << endl;}}
return 0;
}// 將陣列p中數字串右移bits位
void enlarge(int p, int q, int bits)
// 比較大小:如a>b,返回1,相等返回0,否則返回-1
int compare(int a, int b)
return 0; // 兩數相等
}// 兩個大整數相減:a >= b
void subtract(int a, int b)
a[i] = a[i] - b[i];
}while(a[0] > 0 && a[a[0]] == 0) // 去掉高位多餘的0,同時修正a的位數
a[0]--;
}}// 輸出
void print(int a)
測試結果:
C 高精度運算
高精度加法vector int add vector int a,vector int b if t c.push back 1 return c 高精度減法 判斷a b 的大小,保證函式裡面是大的減小的 bool cmp vector int a,vector int b vector int a...
高精度除法 c語言實現
一定要注意高精度除法的實現是需要注意在對求解的陣列的獲取是,是從高位先得到數的,這個過程要模擬真正除法的過程,所以最後這個陣列的長度,必須在進行處理高位的0的時候就提前賦予,不然會出問題,此題還算出了r即是餘數 include includeusing namespace std 減法還需要判斷大小...
高精度運算模版C語言
include include include include define maxx 100 using namespace std 高精度加法 void add char s1,char s2 b maxx 10 int l1 strlen s1 int l2 strlen s2 for i l...