2016.5.18——Excel Sheet Column Number

Excel Sheet Column Number

本题收获:

1.对于字符串中字母转为ASIIC码:string s ;res = s[i]-'A'; 这个res就是数字s[i]-'A'是对ASIIC的操作。

2.对于进制的转换:利用for循环 ,%,/,数组在完成。

3.2中的数组都是从左到右的,在此题中不是按照从高位到低位。

  题目:

  elated to question Excel Sheet Column Title

  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进制转换为16进制,但是后面程序具体怎么写没有思路。

  leetcode/dicuss思路:26进制转换为16进制,利用for循环对字符数组遍历。

  代码:给出了大神们写的两种代码,没有追求代码行最短,以干净能看懂为主,提供两种不同思路。

  代码1:利用循环加乘

 1 class Solution 
 2 {
 3 public:
 4     int titleToNumber(string s) 
 5     {
 6         int ret=0;
 7         for(int i=0;i<s.size();i++)    //对字符串从左到右遍历
 8         {
 9             ret*=26;
10             ret+=s[i]-'A'+1;    //将字符串转化为ASIIC码
11         }
12         return ret;
13     }
14 };

  代码2:利用到幂函数pow(x,y) x的y次方

 1 class Solution {
 2 public:
 3     int titleToNumber(string s) {
 4         int col = 0;
 5         for(int i = s.length(); i > 0; i--) {
 6             col += (s[i - 1] - 'A' + 1) * pow(26, (s.length() - i));
 7         }
 8         return col;
 9     }
10 };

  我的测试代码:把两种思路都写上了

 1 #include "stdafx.h"
 2 #include "iostream"
 3 #include "string"
 4 using namespace std;
 5 
 6 /*思路一
 7 class MyClass
 8 {
 9 public:
10     int titletoNumber(string s)
11     {
12         int res = 0;
13         for (int i = 0; i < s.size(); i++)
14         {
15             res *= 26;
16             res += s[i] - 'A' + 1;
17         }
18         return res;
19     }
20 
21 };*/
22 
23 /*思路二*/
24 class MyClass
25 {
26 public:
27     int titletoNumber(string s)
28     {
29         int res = 0;
30         for (int i = s.size() - 1; i >= 0; i--)
31         {
32             res += s[i] - 'A' + 1 * pow(26, s.size()-i-1);    //AB数组的下标0,1是从左到右的
33         }
34         return res;
35     }
36 };
37 
38 int _tmain(int argc, _TCHAR* argv[])
39 {
40     while (true)
41     {
42         MyClass solution;
43         string s;
44         cin >> s;
45         int m = 0;
46         m = solution.titletoNumber(s);
47         cout << m << endl;
48         system("pause");    //放在while内外都可以
49     }
50     return 0;
51 }

   运行结果图:

  

posted on 2016-05-18 22:33  zhuzhu2016  阅读(282)  评论(0编辑  收藏  举报

导航