# String Conversion# Greedy# Math

f291 - 試算表大小

🔗 前往 ZeroJudge 原題

題目描述

題目要求計算一個試算表的儲存格總數,給定試算表右下角的儲存格名稱(例如 "A1", "AB10", "ZZ99")。欄位使用字母表示(A=1, B=2, ..., Z=26, AA=27, ...),列使用數字表示。

解題思路

這題的核心在於將字母表示的欄位轉換為數字。 欄位的表示方式是 26 進位,其中 A 代表 1,B 代表 2,以此類推,Z 代表 26。 程式碼透過迴圈讀取輸入字串,將字母轉換為對應的數字,並計算出欄位的總數。 同時,程式碼也讀取列數,並將欄數和列數相乘,得到試算表的總儲存格數。

複雜度分析

  • 時間複雜度: O(n),其中 n 是輸入字串的長度。
  • 空間複雜度: O(1),程式碼使用固定大小的陣列來儲存數字,空間複雜度為常數。

程式碼

#include <stdio.h>
char a;
int b,c;
inline void write(int x) {
	if(x==0)
		putchar_unlocked('0');
	else{
		int stk[9],*ptr(&stk[0]);
		while(x){*ptr=x%10;x/=10;++ptr;}
		while(--ptr>=(&stk[0])){putchar_unlocked(*ptr+'0');}
	}
}
int main(){
	while(a=getchar_unlocked()){
		if(a>='0'&&a<='9'){
			c*=10;
			c+=a-'0';
		}
		else if(a>='A'&&a<='Z'){
			b*=26;
			b+=a-'A'+1;
		}
		else{
			break;
		}
	}
	write(b*c);
}

Discussion