題目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805305181847552ios
本題要求計算 A/B,其中 A 是不超過 1000 位的正整數,B 是 1 位正整數。你須要輸出商數 Q 和餘數 R,使得 A=B×Q+R 成立。app
輸入在一行中依次給出 A 和 B,中間以 1 空格分隔。spa
在一行中依次輸出 Q 和 R,中間以 1 空格分隔。code
123456789050987654321 7ci
17636684150141093474 3字符串
A爲不超過1000位的正整數,不是不超過1000,是1000位。用string存儲,B是一位正整數,short便可。好像是大整數的除法問題的簡化,除數只有一位,循環遍歷A,將A中的字符轉化爲數值進行計算,將每次的商轉化爲字符串拼接,每次的餘數參與下一次的被除數。兩點注意。get
#include <iostream> #include <string> using namespace std; int main() { string A; string Q = ""; // 被除數 int m; // 除數 short n; // 商 int p = 0; // 餘數 int q = 0; cin >> A >> n; int limit = A.length(); string::size_type sz; for (int i = 0; i < limit; i++) { // 被除數 if (q == 0) { // 字符轉數字 m = (int)(A[i] - '0'); } else { string temp = to_string(q).append(to_string(A[i] - '0')); m = stoi(temp, &sz); } p = m / n; q = m % n; Q.append(to_string(p)); } // 處理商前面可能出現0的狀況,以及避免商僅爲0,例如 3 / 7 if (Q.find_first_of('0') == 0 && Q.length() > 1) { Q.erase(0, 1); } cout << Q << " " << q << endl; }
to_string()
的時候,怎麼也沒有想到to_string('1')
的返回值居然會是其對應的ASCCI碼值——49,難搞哦。既然是ASCCI碼值,那就按照ASCCI碼來計算吧,減去‘0’的值,便可與預期相符。