#include<iostream>
#include<string>
#include<string.h>
#include <cmath>
using namespace std;
bool isnum(const char num[])
{
for(int i=0;i<strlen(num);i++)
{
if(num[i]<'0'||num[i]>'9')
{
printf("errr!\n");
return false;
}
}
return true;
}
bool isnum2(const char num[])
{
int j=0;
for(int i=0;i<strlen(num);i++)
{
if((num[i]>='0'&&num[i]<='9')||num[i]=='A'||num[i]=='a')
{
j++;
}
}
if(j==strlen(num))
return true;
cout<<"err";
return false;
}
int main()
{
string num;
while(1)
{
char save[50]={0};
char s[50]={0};
double sum=0;
int i=0;
label:
cout<<"请输入你要转换的!\n";
cin>>num;
/// 下面来解析输入的字符串是几进制字符串有效位(0v0012345678)长度不超过8位,
/前面的00不算做有效位 0v九进制 0w564 十一进制
int n=num.length();
if(n<3) printf("err!\n");
else
{ if(num[0]=='0'&&(num[1]=='v'||num[1]=='V'))//说明是九进制
{
for(i=2;i<num.length();i++)
{
save[i-2]=num[i];
}
int i=0;
while(!isnum(save))
{
goto label;
}
i=2;
while(i<num.length()&&num[i]=='0')//过滤前面的00无效位
{
++i;
}
int m=i;
if(num.length()-i>8)//若长度超过8重新开始
{
cout<<"err!"<<endl;
goto label;
}
for(i=m;i<num.length();i++)
{
s[i-m]=num[i];
}
for(i=0;i<strlen(s);i++)
{
float f=s[i]-'0';
sum+=f*pow(9.0,int(strlen(s)-i-1));
}
}
else if(num[0]=='0'&&(num[1]=='w'||num[1]=='W'))//说明是十一进制
{
for(i=2;i<num.length();i++)
{
save[i-2]=num[i];
}
int i=0;
while(!isnum2(save))
{
goto label;
}
i=2;
while(i<num.length()&&num[i]=='0')//过滤前面的00无效位
{
++i;
}
int m=i;
if(num.length()-i>8)//若长度超过8重新开始
{
cout<<"err!"<<endl;
goto label;
}
for(i=m;i<num.length();i++)
{
s[i-m]=num[i];
}
for(i=0;i<strlen(s);i++)
{
float f=0;
if(s[i]=='A'||s[i]=='a')
f=10.0;
else
f=s[i]-'0';
sum+=f*pow(11.0,int(strlen(s)-i-1));
}
}
else{
printf("输入的不是九进制或者11进制!\n");
}
}
cout<<"->"<<sum;
}
return 0;
}
2015华为关于九进制或者十一进制转换10进制的题
最新推荐文章于 2022-09-20 10:55:06 发布