解析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 <math.h> #include<iostream> #include <string> using namespace std; void main() { string str; cin>>str; int len=str.length(); char *ch=new char[len]; for (int i=0;i<len;i++) { ch[i]=str[i]; } int iRet=0; if (ch[0]==‘0‘&&(ch[1]==‘v‘||ch[1]==‘V‘)) { for (int i=len-1;i>1;i--) { if (ch[i]>‘8‘||ch[i]<‘0‘) { cout<<-1; return; } iRet+=(ch[i]-‘0‘)*((int)pow(9.0,len-1-i)); } } else if (ch[0]==‘0‘&&(ch[1]==‘w‘||ch[1]==‘W‘)) { for (int i=len-1;i>1;i--) { if (ch[i]!=‘a‘&&ch[i]!=‘A‘&&(ch[i]>‘9‘||ch[i]<‘0‘)) { cout<<-1; return; } if (ch[i]==‘a‘||ch[i]==‘A‘) { ch[i]=‘0‘+10; } iRet+=(ch[i]-‘0‘)*((int)pow(11.0,len-1-i)); } } else { cout<<-1; return; } cout<<iRet; }
华为上机题
时间: 2024-11-10 16:05:57