练习题
这道题弄了我不少时间.郁闷~~你们用什么算法解决啊?
题目是这样的:
A,B,C,D……到Z,分别表示数字0--25,AA,AB……AZ表示26,27,28……BA,BB,BC……ZZ,AAA……ZZZ
按这样数数,最大可以到10位,如ZZZZZZZZ
输入
A
Z
AA
AB
输出是
0
25
26
27
[解决办法]
long power(int m, int n){ long sum = 1; for(int i = 0; i < n; i++) sum *= m; return sum;}long str2long(char *s, int len){ long sum = 0; for(int i = 0; i < len; i++) { sum += (s[len - 1 - i] - 'A' + 1) * power(26,i); } return sum - 1;}
[解决办法]
#include <iostream>#include <sstream>#include <cstring>#include <cmath>#include <fstream>#include <string>using namespace std;int Parse(const char* str){ if (strlen(str) == 1) return str[0] - 'A'; int n = strlen(str); int data = str[n-1]-'A'; for (int pos = n-2; pos >= 0; --pos) { data += (str[pos]-'A'+1)*pow(26.0, n-pos-1); } return data;}int main(int argc, char* argv[]){/* if (argc < 2) return -1; for (int i = 1; i < argc; ++i) cout << argv[i] << '=' << Parse(argv[i]) << endl; */ stringstream ss; for (char c3 = 'A'; c3 <= 'Z'; ++c3) ss << c3 << endl; for (char c2 = 'A'; c2 <= 'Z'; ++c2) for (char c3 = 'A'; c3 <= 'Z'; ++c3) ss << c2 << c3 << endl; for (char c1 = 'A'; c1 <= 'Z'; ++c1) for (char c2 = 'A'; c2 <= 'Z'; ++c2) for (char c3 = 'A'; c3 <= 'Z'; ++c3) ss << c1 << c2 << c3 << endl; ofstream out("1.txt"); string line; while (getline(ss, line)) { out << line << '=' << Parse(line.c_str()) << endl; }}