华为OJ:进制转换

进制转换
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )

输入描述:
输入一个十六进制的数值字符串。

输出描述:
输出该数值的十进制字符串。

输入例子:
0xA
输出例子:
10

解答(个人版):
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
using namespace std;
int pows(int a,int n)
{
    int result = 1;
    int i=0;
    while(i<n)
    {
       result*=a;
       ++i;
    }
    return result;
}
int main()
{
    string str;
    //string dst;
    int i,j,k,result=0;
    vector<int>v;
    while(cin>>str)
    {
       // k = 0;
        v.clear();
       for(i=2;i<str.length();++i)
       { 
           //cout<<str[i]<<endl;
           if(str[i]<='9'&&str[i]>='0')
              {  
                v.push_back(str[i]-'0');
              }
            else
            {
                if (str[i]=='A'||str[i]=='a')
                {
                     v.push_back(10);
                }
                if (str[i]=='B'||str[i]=='b')
                {
                     v.push_back(11);
                }
                if (str[i]=='C'||str[i]=='c')
                {
                     v.push_back(12);
                }
                if (str[i]=='D'||str[i]=='d')
                {
                     v.push_back(13);
                }
                if (str[i]=='E'||str[i]=='e')
                {
                     v.push_back(14);
                }
                if (str[i]=='F'||str[i]=='f')
                {
                     v.push_back(15);
                }
            }
       }
       int n = 1;
       result = 0;
       for(i=0;i<v.size();++i)
       { 
           result+=(v[i]*pows(16,(v.size()-n++)));
       }  
       cout<<result<<endl;
    }

    return 0;
}

解答(网友版):
#include<iostream>
#include<string>
using namespace std;
int main(){
    string input,output;
    int i,num;
    while(cin>>input){
        num=0;
        for(i=2;i<input.size();i++){
           if(input[i]>='a'&&input[i]<='f')
             num=num*16+(input[i]-'a'+10);
           else if(input[i]>='A'&&input[i]<='F')
             num=num*16+(input[i]-'A'+10); 
           else
             num=num*16+(input[i]-'0');   
        }
        output=to_string(num);
        cout<<output<<endl;
        }       
  return 0; 
}

另外,我还发现了一种简单粗暴直接的办法:
链接:https://www.nowcoder.com/questionTerminal/8f3df50d2b9043208c5eed283d1d4da6
来源:牛客网

#include <iostream>
using namespace std;
int main()
{
    int a;
    while(cin>>hex>>a)
    {
      cout<<a<<endl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值