2016/5/27 1000. Hex to decimal

来源:互联网 发布:淘宝客服脐橙问题总结 编辑:程序博客网 时间:2024/05/17 02:47
本题考查的是try throw catch 三连发的套路,f()里已经有了try和catch,需要写的就是出错的时候throw一个对象。而runtime_error是在<ctdexcept>的头文件里的类。它的what也是一般的返回字符串。
#include <iostream>#include <string>#include <cmath>#include <stdexcept>using namespace std;int judge(char a){if (a <= 57 && a >= 48){return 1;}else if (a >= 65 && a <= 70){return 2;}else{return 0;}}int parseHex(string s){int result = 0;for (int i = s.length() - 1; i >= 0; i--){if (judge(s[i]) == 0){s = "Hex number format error\n";throw (runtime_error)(s);}else if (judge(s[i]) == 1){result += ((s[i] - 48) * pow(16, s.length() - 1 - i));}else if (judge(s[i]) == 2){result += ((s[i] - 55) * pow(16, s.length() - 1 - i));}}return result;}void f(){try{cout << parseHex("10") << endl;cout << parseHex("ABC") << endl;cout << parseHex("9G3") << endl;}catch (runtime_error ex){cout << ex.what() << endl;}}int main(){f();return 0;}
需要注意的是为了方便判断十六进制的所给字符串,写了一个judge函数去判断每一个字符。
0 0
原创粉丝点击