給定一個出現在Excel表格上的列表標題,返回它的正確行數。
例如:
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
Given a column title as appear in an Excel sheet, return its corresponding column number.
For example:
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
有了上一題的經驗,這次要容易得多了。它的題意也能理解了,就是從上面的實例左側字符轉換成右側的數字。
下面是上一題的博客截圖,我舉了一個進制轉換的例子,但是沒有說的很明確,那麼就在這一題裡充分說明一下好了,大家請繼續往下看。
相信有了這個示例,大家就可以秒懂了。
然後我就寫了如下代碼:
#include
using namespace std;
int exponent(int x, int y) {
int answer = 1;
for(int i = 0; i < y; ++ i) {
answer *= x;
}
return answer;
}
int titleToNumber(string s) {
int n = 0, len = s.length();
for(int i = 0; i < s.length(); ++ i) {
char c = s[i];
int chara = c - 'A' + 1;
n += chara * exponent(26, len - 1 - i);
}
return n;
}
int main() {
cout<
輸出結果是
704
這是正確的,後來我改成了如下代碼:
#include
#include
using namespace std;
int titleToNumber(string s) {
int n = 0, len = s.length();
for(int i = 0; i < s.length(); ++ i) {
char c = s[i];
int chara = c - 'A' + 1;
n += chara * pow(26, len - 1 - i);
}
return n;
}
int main() {
cout<
輸出是:
703
於是我就納悶了,後來我從CodeBlocks換到餓了Visual Studio就成了704了,704是正確的。
<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPjxjb2RlIGNsYXNzPQ=="hljs cpp">而在CB中把代碼改成:
n += chara * (int)pow(26.0, len - 1 - i);
結果反而成了702了。
希望大家發現問題的在下面留言告訴我啊……
代碼
class Solution {
public:
int titleToNumber(string s) {
int n = 0, len = s.length();
for (int i = 0; i < s.length(); ++i) {
char c = s[i];
int chara = c - 'A' + 1;
n += chara * pow(26, len - 1 - i);
}
return n;
}
};