您的位置:首页 > 其它

这些年我读过的技术经典图书(附电子版下载地址)

2013-12-03 21:47 267 查看
解析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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: