首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

练习题解决方案

2012-03-23 
练习题这道题弄了我不少时间.郁闷~~你们用什么算法解决啊?题目是这样的:A,B,C,D……到Z,分别表示数字0--25,A

练习题
这道题弄了我不少时间.郁闷~~你们用什么算法解决啊?
题目是这样的:
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



[解决办法]

C/C++ code
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;}
[解决办法]
C/C++ code
#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;    }} 

热点排行