之前投了华为的实习生,昨天让去参加“华为编程大赛”机试。就一个题,在网吧上机,时间30分钟,题目如下:
17进制转成10进制,输入是数字跟大写字母。例如输入G、11、FF,分别输出16、18、270
(好吧,好多大神都觉得这题太菜了,我快到时间才大体写出来的,回来一想,当时我考虑的也不周全;不过说实话,对于编程大赛,出这种题目是简单了一些。)
参考代码如下:
void main()
{
string str;
cin>>str;
int i=0;
int num=0;//保存转换后数字
int factor=1;
bool sign=1;//用来标志输入字符串是否非法
int len=str.size();
for (i=0;i<len;i++)
{
if (str[i]>='0' && str[i]<='9')
{
num=num*factor+(str[i]-'0');
factor*=17;
}
else if (str[i]>='A' && str[i]<='G')
{
num=num*factor+(str[i]-'A'+10);
factor*=17;
}
else
{
sign=0;
break;
}
}
if (sign)
cout<<num<<endl;
else
cout<<"Error Input!"<<endl;
}
注:我这个破程序没考虑大数的情况,我记得当时题目说输入范围好像是0~0xFFFF,记不太清了,反正题目中给出了范围。