f302 - 沒有 0 的阿拉伯數字
題目描述
題目要求將一種特殊的阿拉伯數字系統轉換為十進位。這種阿拉伯數字系統只使用 1 到 9 的數字,並且沒有 0。例如,9 的下一個數字是 11,19 的下一個數字是 21,99 的下一個數字是 111。給定一個這種特殊系統的數字,需要計算其對應的十進位值。
解題思路
這題的核心在於理解特殊阿拉伯數字系統的規則。這個系統實際上是一種九進位的變形。每個位數的權重都是 9 的冪。例如,數字 "18" 在這種系統中表示 (1 * 9^1) + (8 * 9^0) = 9 + 8 = 17。程式碼直接模擬了這種轉換過程,從左到右遍歷輸入字串,每次將當前位數的值加到結果中,並將結果乘以 9,以準備處理下一位數。
複雜度分析
- 時間複雜度: O(n),其中 n 是輸入字串的長度。程式碼需要遍歷輸入字串一次。
- 空間複雜度: O(1),程式碼只使用了常數級別的額外空間。
程式碼
#include <iostream>
using namespace std;
int c[9]={1,2,3,4,5,6,7,8,9};
string n;
int main(){
while(cin >> n){
int ans=0;
for(int i=0;i<n.length();++i){
ans*=9;
ans+=c[n[i]-'1'];
}
cout << ans << '\n';
}
}