数组-08. 字符串转换成十进制整数(15)

来源:互联网 发布:银川网络教育 编辑:程序博客网 时间:2024/05/22 00:40

数组-08. 字符串转换成十进制整数(15)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
张彤彧(浙江大学)

输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果过滤后字符串的首字符为“-”,代表该数是负数。

输入格式:

输入在一行中给出一个以#结束的非空字符串。

输出格式:

在一行中输出转换后的十进制数。题目保证输出在长整型范围内。

输入样例:
+P-xf4+-1!#
输出样例:
-3905





#include <iostream>#include <string>#include <cctype>#include <cmath>#include <vector>using namespace std;int main(){    string word;    cin >> word;    for (auto &i : word)    {    //if(isalpha(i))      //这个if不加仍然正确,函数不会改变非字母的值        i = toupper(i);    }    char hex[17] = {'0', '1', '2', '3', '4', '5', '6',                    '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', '-'                   };    // string hexnum;    // 这样是不行的,因为假如是AF的话,变成字符串1015,就不知道怎么划分数了!    // 要用vector来保存数!    vector<char> hexnum;    for (auto i : word)    {    if(i=='#'){    break;    }        for (int t = 0; t < 17; ++t)        {            if (i == hex[t])            {                hexnum.push_back(i);             }        }    }    int sign = 0;    if (hexnum[0] == '-')    {        sign = 1;    }    int flag=hexnum.size(); //16进制数目    // int flag = hexnum.size() - 1; 不能用这个,因为这时里面还残留‘-’,要再把-给消去    for(auto i : hexnum){    if(i=='-')    --flag;    }    flag-=1; //这个flag代表上16的次数    long long sum = 0;    for (auto i : hexnum)    {        if (i != '-')        {            for (int t=0; t < 16; ++t)            {            if(i==hex[t])                sum += t * pow(16, flag--);            }        }    }    if (sign == 1)    {        cout << '-';    }    cout << sum << endl;    return 0;}最后有两分不能通过,不知道为什么


0 0