解析9进制,11进制的字符串为10进制的数字输出
描述:
解析9进制,11进制的字符串为10进制的数字输出,输入的字符串有效位(0v0012345678)长度不超过8位,
前面的00不算做有效位。解析后以10进制的数字输出。
如果解析到非法字符串则返回-1
9进制:
9进制的数的范围:0,1,2,3,4,5,6,7,8
9进制的开始为:0V或者0v
9进制的正确实例:0V11 0v564 0V123 0v0784 0V0 0v 0V
9进制的错误实例:0V923 0vt12 00V21 0123
9进制转换为10进制:0V11 -> 10
0v564 -> 463
11进制:
11进制的数的范围:0,1,2,3,4,5,6,7,8,9,A(a)
11进制的开始为:0W或者0w
11进制的正确实例:0W11 0w564 0W123 0w0A8a 0W 0w
11进制的错误实例:0WB923 0wVaA 00W21 0WAx123
11进制转换为10进制:
0W11 -> 12
0w564 -> 675
#include <iostream> #include<vector> #include <list> #include <map> #include <string> #include <algorithm> using namespace std; int jinzhiConverter(string in) { int sum = 0; int length = in.length(); if (length<2) { return -1; } if ((in[1] != 'v' && in[1] != 'w'&&in[1] != 'V' && in[1] != 'W') || in[0] != '0') { return -1; } else { if (length == 2) { return 0; } if (in[1] == 'v' || in[1] == 'V') { for (int i = 2; i<length; i++) { if (in[i] <= '8'&&in[i] >= '0') { sum = sum * 9 + in[i] - '0'; } else { return -1; } } } else { for (int i = 2; i<length; i++) { if ((in[i] <= '9'&&in[i] >= '0') || in[i] == 'A' || (in[i] == 'a')) { if (in[i] == 'A' || (in[i] == 'a')) { sum = sum * 11 +10; // sum=sum*11+'a'-'0'; ????ascii???? } else{ sum = sum * 11 + in[i] - '0'; } } else { return -1; } } } } return sum; } int main() { string in; cin >> in; cout << jinzhiConverter(in); }