首页 > 试题广场 >

进制转换

[编程题]进制转换
  • 热度指数:934043 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。

数据范围:保证结果在

输入描述:

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



输出描述:

输出该数值的十进制字符串。不同组的测试用例用\n隔开。

示例1

输入

0xAA

输出

170

#include <iostream>
using namespace std;

int main()
{
    int a;
    while(cin>>hex>>a){
    cout<<a<<endl;
    }
}
发表于 2016-03-24 12:36:23 回复(119)
#include<iostream>
using namespace std;
//十进制 dec
//十六进制:hex
//八进制:oct
int main()
{
    int a;
    while(cin>>hex>>a)   //读入六进制
    {
        cout<<a;
        cout<<endl;
    }
    return 0;
}

发表于 2021-08-18 15:36:28 回复(1)
想到稍微省事点的写法,把16进制直接写进字符串str,不过一开始sum没写等于0就一直出错,怎么回事啊?不是定义变量以后自动初始化为0吗?
#include<iostream>
#include<cmath>
using namespace std;

int main(){
    string s,str="0123456789ABCDEF";
    while(getline(cin,s)){
        int k=1, sum=0,pos;
        for(int i=s.size()-1;i>1;i--){
            pos=str.find(s[i]);
//             sum+=(pos*pow(16.0,k));
//             k++;
            sum+=(pos*k);
            k*=16;
        }
      cout<<sum<<endl;
    }
}


发表于 2021-02-25 17:48:30 回复(0)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

ll XToDec(string s,ll x) {  //将给定的x进制字符串s转换成10进制
    ll ans = 0;
    for(ll i = 0; i < s.length(); i++) {
        ans = ans*x + (isdigit(s[i]) ? s[i]-'0' : s[i]-'A'+10);
    }
    return ans;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    string s;
    while(cin >> s) {
        s = s.substr(2,s.length()-2);
        cout << XToDec(s,16) << endl;
    }
    return 0;
}
编辑于 2020-08-26 09:01:38 回复(0)
如果p进制数x为a1a2...an,则十进制为y=a1*p的n-1次幂+a2*p的n-2次幂+an
#include<iostream>
(720)#include<string.h>
#include<math.h> 
using namespace std;
int main(){
	char s[1000];
	while(gets(s)){
		int m=0,sum=0;
		int len=strlen(s);
		for(int i=len-1;i>=0;i--){
			if(s[i]>='0'&&s[i]<='9')
			sum=sum+(s[i]-'0')*pow(16,m);
			else if(s[i]>='A'&&s[i]<='F')
			sum=sum+(s[i]-'A'+10)*pow(16,m);
			else if(s[i]>='a'&& s[i]<='f')
			sum=sum+(s[i]-'a'+10)*pow(16,m);
			m++;
	  	}
	  	cout<<sum<<endl;
	}
} 



发表于 2020-03-30 10:30:12 回复(0)
//同不知道考察什么,这个进制转化蛮简单的,就是注意一下switch不要把break忘记了
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main(){
    char a[20],b[20];
    while(cin>>a){
        int len=strlen(a),total=0;
        for(int i=len-1;i>1;i--)
            b[len-i-1]=a[i];
        for(int i=0;i<len-2;i++)
            switch(b[i]){
                case '0': total+=0*pow(16,i);break;
                case '1': total+=1*pow(16,i);break;
                case '2': total+=2*pow(16,i);break;
                case '3': total+=3*pow(16,i);break;
                case '4': total+=4*pow(16,i);break;
                case '5': total+=5*pow(16,i);break;
                case '6': total+=6*pow(16,i);break;
                case '7': total+=7*pow(16,i);break;
                case '8': total+=8*pow(16,i);break;
                case '9': total+=9*pow(16,i);break;
                case 'A': total+=10*pow(16,i);break;
                case 'B': total+=11*pow(16,i);break;
                case 'C': total+=12*pow(16,i);break;
                case 'D': total+=13*pow(16,i);break;
                case 'E': total+=14*pow(16,i);break;
                case 'F': total+=15*pow(16,i);break;
            }
        cout<<total<<endl;
    }
    return 0;
}

发表于 2020-01-07 09:46:37 回复(0)
import java.util.Scanner;
public class Main {
    public static long hexToDec(String str){
        String[] list = str.split("0x");
        boolean isNegative =false;
        if(list[0].equals("-")){
            isNegative = true;
        }
        String temp = list[1];
        int flag =0;
        long num=0;
        for (int i = temp.length()-1; i >=0 ; i--) {
            if(temp.substring(i, i+1).equalsIgnoreCase("F")){
                num += (int)15*Math.pow(16,flag);
                flag++;
            }else if(temp.substring(i, i+1).equalsIgnoreCase("E")){
                num += (int)14*Math.pow(16,flag);
                flag++;
            }else if(temp.substring(i, i+1).equalsIgnoreCase("D")){
                num += (int)13*Math.pow(16,flag);
                flag++;
            }else if(temp.substring(i, i+1).equalsIgnoreCase("C")){
                num += (int)12*Math.pow(16,flag);
                flag++;
            }else if(temp.substring(i, i+1).equalsIgnoreCase("B")){
                num += (int)11*Math.pow(16,flag);
                flag++;
            }else if(temp.substring(i, i+1).equalsIgnoreCase("A")){
                num += (int)10*Math.pow(16,flag);
                flag++;
            }else{
                num += (int)Integer.parseInt(temp.substring(i, i+1))*Math.pow(16,flag);
                flag++;
            }
        }
        if(isNegative){
            return -num;
        }
        return num;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()){
            String str = sc.next();
//            System.out.println(Integer.decode(str));
            System.out.println(hexToDec(str));
        }
    }
}

编辑于 2019-08-31 10:52:28 回复(0)
import java.util.Scanner;
public class Main{
public static void main(String[] args)
    {
        Scanner sc= new Scanner(System.in); 
        while (sc.hasNext()) {
        String str=sc.nextLine();
        int len=str.length()-2;
        int num=0;
        int y=0;
        for(int i=str.length()-1;i>=2;i--)
        {
            if(str.charAt(i)=='A')num+=10*toten(y);
            else if(str.charAt(i)=='B')num+=11*toten(y);
            else if(str.charAt(i)=='C')num+=12*toten(y);
            else if(str.charAt(i)=='D')num+=13*toten(y);
            else if(str.charAt(i)=='E')num+=14*toten(y);
            else if(str.charAt(i)=='F')num+=15*toten(y);
            else num+=Integer.parseInt(String.valueOf(str.charAt(i)))*toten(y);
            y++;
        }
        System.out.println(num);
        }
    }     public static int toten(int a) {         int x=1;         if (a==0) return x;         for (int i = 0; i < a; i++) {             x*=16;         }         return x;     }
}

发表于 2019-06-22 16:05:53 回复(1)
#include <iostream>
#include <string>
using namespace std;

unsigned long HextoDec(string s)
{
    unsigned long sum = 0, *result = new unsigned long[s.length()];
    for (int i = 0; i < s.length(); i++)
    {
        if (s[i] >= 'A' && s[i] <= 'F') result[i] = ((unsigned long)(s[i]) - 55) << (4 * (s.length() - 1 - i)); //m乘以的2的n次方 = m << n
        else if (s[i] >= 'a' && s[i] <= 'f') result[i] = ((unsigned long)(s[i]) - 87) << (4 * (s.length() - 1 - i));
        else if (s[i] >= '0' && s[i] <= '9') result[i] = (unsigned long)(s[i] - 48) << (4 * (s.length() - 1 - i));
        sum += result[i];
    }
    return sum;
}

int main()
{
    string s;
    while (cin >> s)
    {
        string hex;
        for(int i = 2; i < s.length(); i++) hex += s[i];
        cout << HextoDec(hex) << endl;
    }
    return 0;
}
发表于 2018-05-10 17:12:14 回复(0)
#include<iostream>
#include<string.h>
using namespace std;
int main(){         int maxLength = 1010;      char nowLine[maxLength];       while(cin.get(nowLine, maxLength)){             long long allSum = 0;         int times = 0;         for(int i = strlen(nowLine) - 1; i > 1; i--){              int nowt = 0;             if(nowLine[i] - '0' <= 9 && nowLine[i] - '0' >= 0){                 nowt = nowLine[i] - '0';             }             else{                 nowt = nowLine[i] - 'A' + 10;             }             for(int i = 0; i < times; i++){                 nowt = nowt * 16;                         times++;             allSum += nowt;          }         cout<<allSum<<endl; 
        cin.ignore();         return 0;
}

发表于 2017-09-18 12:16:23 回复(0)
#include <stdio.h>
int main(void){
	int n;
	while(scanf("%x", &n)!=EOF){
		printf("%d\n", n);
	}
	return 0;
}

发表于 2017-09-04 10:44:49 回复(0)
NJ头像 NJ
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
 
intmain()
{
    string str1;
    while(cin >> str1)
    {
        string str2=str1.substr(2,str1.size()-2);
        intsum=0;
        for(inti = str2.size()-1;i>=0;--i)
        {
            if(str2[i] >= '0'&& str2[i] <= '9')
                str2[i] -= 48;
            if(str2[i] >= 'A'&& str2[i] <= 'F')
                str2[i] -=55;
            sum += str2[i]*pow(16,str2.size()-i-1);
        }
        cout << sum << endl;
    }
        return0;
}

发表于 2017-08-30 15:23:36 回复(2)
#include <stdio.h>
int main()
{
    int a;
    while(scanf("%x",&a) != EOF) {
        printf("%d\n",a);
    }
    return 0;
}
//aaaaa  no no no   !!!
发表于 2017-05-04 16:56:46 回复(0)
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int char_to_int(char ch){
    if(ch >= 'a'){
        return ch-'a'+10;
    }else if(ch >= '0'){
        return ch-'0';
    }else{
        return 0;
    }
}
char* itostr(int n)  
{      
    static char s[100];      //必须为static变量,或者是全局变量
    sprintf(s, "%d", n);
    return s;  
}
string str0x_to_strint(string str){
    transform(str.begin(),str.end(),str.begin(),::tolower);
    int num = 0;
    str = str.substr(2);
    for(int i = 0; i < str.size(); i++){
        int temp = char_to_int(str[i]);
        num *= 16;
        num += temp;
    }
    string ret(itostr(num));
    return ret;
}
int main(){
    string str0x;
    while(cin>>str0x){
        cout<<str0x_to_strint(str0x)<<endl;
    }
    
    return 0;
}
发表于 2017-03-14 15:01:42 回复(0)
whileTrue:
    try:
        print str(int(raw_input(),base=16))
    except EOFError:
        break
发表于 2017-03-13 22:16:25 回复(0)

#include <iostream>

#include <string.h>

#include <math.h>

using namespace std ;

int len, res;

char str[ 1000 ];

int main()

{

    while ( cin >> str )

    {

        res = 0 ;

        len = strlen ( str );

        int j = 0 ;

        int cal = 0 ;

        for ( int i= len - 1 ;i> 1 ;i--)

        {

            if ( str [i]>= ' 0 ' && str [i]<= ' 9 ' )

                cal = str [i]- ' 0 ' ;

            else if ( str [i]>= 'a' && str [i]<= 'z' )

                cal = str [i]- 'a' + 10 ;

            else

                cal = str [i]- 'A' + 10 ;

            res += cal* pow ( 16 ,j);

            j++;

        }

        cout << res << endl ;

    }

    return 0 ;

}

发表于 2017-01-21 17:31:56 回复(0)

python3解法,一行代码搞定:

while True:
    try:
        print(int(input(),16))
    except:
        break
编辑于 2017-09-08 08:35:34 回复(29)
#include<iostream>
using namespace std;
int func(int);
int main()
{
    
    string str;
    cin>>str;
    long long hx=0;
    for(int i=str.size()-1;i>1;i--)
    {
        if(str[i]=='A'||str[i]=='a')
            str[i]=10;
        else if(str[i]=='B'||str[i]=='b')
                str[i]=11;
        else if(str[i]=='C'||str[i]=='c')
                str[i]=12;
        else if(str[i]=='D'||str[i]=='d')
                str[i]=13;
        else if(str[i]=='E'||str[i]=='e')
                str[i]=14;
        else if(str[i]=='F'||str[i]=='f')
                str[i]=15;
        else if(str[i]=='9')
            str[i]=9;
        else if(str[i]=='8')
            str[i]=8;
        else if(str[i]=='7')
            str[i]=7;
        else if(str[i]=='6')
            str[i]=6;
        else if(str[i]=='5')
            str[i]=5;
        else if(str[i]=='4')
            str[i]=4;
        else if(str[i]=='3')
            str[i]=3;
        else if(str[i]=='2')
            str[i]=2;
        else if(str[i]=='1')
            str[i]=1;
        else
            str[i]=0;
        hx+=str[i]*func(str.size()-i-1);
    }
    cout<<hx;
    return 0;
}
int func(int i)
{
    int temp=1;
    if(i==0)
        return 1;
   else
   {
    for(int j=1;j<=i;j++)
      temp*=16;  
    return temp;
   }
}
发表于 2022-04-19 18:42:59 回复(0)

十六进制转换十进制与二进制转换十进制同理,不同之处在于二进制的位权是2的指数,而十六进制的位权则是16的指数。针对本题输入的十六进制数值字符串除却开头的"0x",剩余位为有效位。对有效位从右至左依次升幂,同时乘以当位的基数,对每一位执行相同的如上操作,再将结果求和即可得十六进制数值对应的十进制数值。

import java.util.HashMap;
import java.util.Scanner;

public class Main {

    private static HashMap<Character, Integer> map;

    static {
        map = new HashMap<Character, Integer>();
        map.put('A', 10);
        map.put('B', 11);
        map.put('C', 12);
        map.put('D', 13);
        map.put('E', 14);
        map.put('F', 15);
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        while (in.hasNext()) {
            String input = in.nextLine();

            System.out.println(toDecimal(input));
        }
    }

    private static int toDecimal(String input) {
        //将十六进制数值字符串转换为十进制数值

        int res = 0;
        int length = input.length() - 1;
        for (int i = input.length() - 1; i >= 2; i--) {
            //当前位字符
            char cur = input.charAt(i);
            if (Character.isDigit(cur)) {
                //如果当前位字符为数字,直接将字符转为相应的int型数值,执行运算
                res += Math.pow(16, length - i) * Integer.parseInt(cur + "");
            } else {
                //如果当前位字符为A~F中的字母,根据十六进制规定,将其转换为相应的int型数值,执行运算
                res += Math.pow(16, length - i) * map.get(cur);
            }
        }

        return res;
    }
}
发表于 2022-01-23 20:11:01 回复(1)
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int main()
{
    string str;
    while(cin>>str){
        long long int ans=0;
        int tmp=0;
        for(int i=str.length()-1;i>=2;i--){
            if(str[i]>='0'&&str[i]<='9'){
                ans+=(str[i]-'0')*pow(16,tmp++);
            }
            else{
                ans+=(str[i]-'A'+10)*pow(16,tmp++);
            }
        }
        cout<<ans<<endl;
    }
}
发表于 2019-07-23 14:49:21 回复(0)

问题信息

难度:
2008条回答 163564浏览

热门推荐

通过挑战的用户

查看代码
进制转换