f291 - 試算表大小
題目描述
題目要求計算一個試算表的儲存格總數,給定試算表右下角的儲存格名稱(例如 "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);
}