【LeetCode从零单刷】Excel Sheet Column Number

来源:互联网 发布:怎么做网络推广赚钱 编辑:程序博客网 时间:2024/04/30 23:35

题目:

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 

解答:

怎么说,类似26进制数一样。乍看之下挺简单。于是写下:

class Solution {public:    int titleToNumber(string s) {    int len = s.size();        if(len <= 0)    return 0;                int base = 0;        for(int i = 0; i< len; i++)        {            base += (s[i] - 'A' + 1) * pow(26, len - i - 1);        }        return base;    }};
然后WA。。。慢慢查错。我竟然发现:

#include <stdio.h>#include <stdlib.h>#include <math.h>int main(){int a = 1;printf("%d\n", (int)pow(26, a));printf("%f\n", pow(26, a));return 0;}
输出第一行是25,第二行是26.000000. 说实话,当时我的心情几乎是崩溃的。

后来发现:关于pow函数的强制类型转换。浮点数都是不精确的,在强制转换精度时可能会出现 (int)25.999999 = 26 的情况。

所以我将 int base = 0; 改为 float base = 0; ,结果还是不对。错误显示在:

Input:"CFDGSXM";Output:1000000000;Expected:1000000001

于是我出离愤怒了。竟然超过了数据可表示精度。最终换成了:

class Solution {public:    int titleToNumber(string s) {int len = s.size();        if(len <= 0)    return 0;                long double base = 0;        for(int i = 0; i< len; i++)        {            base += (s[i] - 'A' + 1) * pow(26, len - i - 1);        }                return base;        }};

0 0
原创粉丝点击