日期:2025年4月12日
ZeroJudge 題目連結:j179. 資料分類 (Classification)
解題想法
注意:n 的位數在運算時不一定會遞減。
Python 程式碼
利用 int 將字串轉成整數,刪除前面的 0,再用 str 轉回字串。使用時間約為 19 ms,記憶體約為 3.3 MB,通過測試。
import sys
for n in sys.stdin:
n = n.strip()
while len(n) > 1: # 如果 n 長度大於 1 繼續執行
if len(n) == 4: # 4 位數
le, ri = n[:2], n[2:] # 左、右半邊
if int(le) >= 10: # 轉成 int,如果大於等於 10 才要相乘
le = str(int(le[0])*int(le[1])) # 兩位轉成 int 相乘再轉回 str
if int(ri) >= 10: # 轉成 int,如果大於等於 10 才要相乘
ri = str(int(ri[0])*int(ri[1])) # 兩位轉成 int 相乘再轉回 str
else: ri = str(int(ri)) # 去掉前面的 0
n = str(int(le + ri)) # 先將 le + ri 轉成 int 再轉回 str,去掉前面的 0
elif len(n) == 3: # 3 位數
le, ri = n[:2], n[1:] # 左、右半邊
le = str(int(le[0])*int(le[1])) # 兩位轉成 int 相乘再轉回 str
ri = str(int(ri[0])*int(ri[1])) # 兩位轉成 int 相乘再轉回 str
n = str(int(le + ri)) # 先將 le + ri 轉成 int 再轉回 str,去掉前面的 0
elif len(n) == 2: # 2 位數
n = str(int(n[0])*int(n[1])) # 兩位轉成 int 相乘再轉回 str
print(n)
C++ 程式碼
使用時間約為 2 ms,記憶體約為 352 kB,通過測試。
#include <iostream>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(0); cin.tie(0);
string n;
while(cin >> n) {
while(n.size() > 1) { // 如果 n 長度大於 1 繼續執行
if (n.size() == 4) { // 4 位數
string le = n.substr(0, 2), ri = n.substr(2); // 左、右半邊
if (stoi(le) >= 10) { // 轉成 int,如果大於等於 10 才要相乘
le = to_string((le[0]-'0')*(le[1]-'0')); // 兩位轉成 int 相乘再轉回 str
}
if (stoi(ri) >= 10) { // 轉成 int,如果大於等於 10 才要相乘
ri = to_string((ri[0]-'0')*(ri[1]-'0')); // 兩位轉成 int 相乘再轉回 str
} else {
ri = ri.substr(1); // 去掉前面的 0
}
n = to_string(stoi(le + ri)); // 先將 le + ri 轉成 int 再轉回 str,去掉前面的 0
} else if (n.size() == 3) { // 3 位數
string le = n.substr(0, 2), ri = n.substr(1); // 左、右半邊
le = to_string((le[0]-'0')*(le[1]-'0')); // 兩位轉成 int 相乘再轉回 str
ri = to_string((ri[0]-'0')*(ri[1]-'0')); // 兩位轉成 int 相乘再轉回 str
n = to_string(stoi(le + ri)); // 先將 le + ri 轉成 int 再轉回 str,去掉前面的 0
} else if (n.size() == 2) { // 2 位數
n = to_string((n[0]-'0')*(n[1]-'0')); // 兩位轉成 int 相乘再轉回 str
}
}
cout << n << "\n";
}
return 0;
}
沒有留言:
張貼留言