# Base Conversion# String Manipulation# Math

f302 - 沒有 0 的阿拉伯數字

🔗 前往 ZeroJudge 原題

題目描述

題目要求將一種特殊的阿拉伯數字系統轉換為十進位。這種阿拉伯數字系統只使用 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';
	}
}

Discussion