首页 > 其他 > 详细

华为上机题

时间:2014-08-06 14:44:41      阅读:297      评论:0      收藏:0      [点我收藏+]

解析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;
    
}

 

华为上机题,布布扣,bubuko.com

华为上机题

原文:http://www.cnblogs.com/mu-tou-man/p/3894426.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!