解析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
0w564->675
输入: 输入为一行9进制或11进制的字符串,格式如上述
输出: 输出为10进制的数字
长度不超过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进制:
#include<iostream>
#include<string>
using namespace std;
int trans(string s)
{
int i,num=0;
int len=s.size();
if(s[0]=='0')
{
if(s[1]=='V'||s[1]=='v')
{
if(len-2>8)
return -1;
for(i=2;i<s.size();i++)
{
if(ispunct(s[i])) //如果是字母,ispunct()
//if(s[i]<'0'||s[i]>'9')
return -1;
num=9*num+(s[i]-'0');
}
return num;
}
else
if(s[1]=='W'||s[1]=='w')
{
if(len-2>10)
return -1;
for(i=2;i<s.size();i++)
{
if(s[i]=='A'||s[i]=='a')
num=11*num+10;
else
if(isdigit(s[i])) //如果是数字,isdigit()
//if(s[i]>='0'&&s[i]<='9')
num=11*num+(s[i]-'0');
else
return -1;
}
return num;
}
else
return -1;
}
else
return -1;
}
int main()
{
string s;
cin>>s;
int num;
num=trans(s);
cout<<num<<endl;
return 0;
}
11进制的数的范围:0,1,2,3,4,5,6,7,8,9,A(a)
11进制的开始为:0W或者0w
11进制的正确实例:0W11 0w564 0W123 0w0A8a
11进制的错误实例:0WB923 0wVaA 00W21 0WAx123
11进制转换为10进制:
0w564->675
输入: 输入为一行9进制或11进制的字符串,格式如上述
输出: 输出为10进制的数字