程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> LeetCode 171 Excel Sheet Column Number(Excel的列向表數字)

LeetCode 171 Excel Sheet Column Number(Excel的列向表數字)

編輯:C++入門知識

LeetCode 171 Excel Sheet Column Number(Excel的列向表數字)


翻譯

給定一個出現在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是正確的。

這裡寫圖片描述<喎?http://www.Bkjia.com/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;
    }
};

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved