首页 > 试题广场 >

进制转换

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

数据范围:保证结果在

输入描述:

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



输出描述:

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

示例1

输入

0xAA

输出

170
#include <stdio.h>

int main() {
    char hex[20]; 
    while (scanf("%s", hex) != EOF) {
        int z;
        sscanf(hex, "%x", &z);
        printf("%d\n", z);
    }
    return 0;
}

发表于 2023-12-21 20:25:14 回复(0)
1.指导思想:十六进制与十进制的2的特殊关系,十六进制数值可以看成是2的各种幂次方之和。
2.思路:
(1) 题目给了值范围1到2^23-1,也就是需要用unsigned int
(2) 根据指导思想,关键就是找到哪些次幂,手段就是使用移位操作和按位与。
#include <stdio.h>

unsigned int cal_mi(unsigned int arg, int i)
{
    unsigned int res = 1;
    while(i--)
        res *= arg;

    return res; 
}
int main() {
    int i = 0;
    unsigned int hex;
    unsigned int res=0;
    while(scanf("%x", &hex) != EOF)
    {
        for (i=0; i < 32 ; i++){
            if ((hex >> i) & 0x1)
                res += cal_mi(2,i);
        }
        printf("%u\n", res);
    }
  
    return 0;
}


发表于 2023-11-25 11:14:06 回复(0)
#include <stdio.h>
int main() {
    char c;int t = 0;
    while (getchar()!='x');
    c=getchar();
    while (c!=' '&&c!='\n'&&c!=EOF) {
        switch (c) {
            case '0':t=(t<<4)+0;break;
            case '1':t=(t<<4)+1;break;
            case '2':t=(t<<4)+2;break;
            case '3':t=(t<<4)+3;break;
            case '4':t=(t<<4)+4;break;
            case '5':t=(t<<4)+5;break;
            case '6':t=(t<<4)+6;break;
            case '7':t=(t<<4)+7;break;
            case '8':t=(t<<4)+8;break;
            case '9':t=(t<<4)+9;break;
            case 'a':t=(t<<4)+10;break;
            case 'b':t=(t<<4)+11;break;
            case 'c':t=(t<<4)+12;break;
            case 'd':t=(t<<4)+13;break;
            case 'e':t=(t<<4)+14;break;
            case 'f':t=(t<<4)+15;break;
            case 'A':t=(t<<4)+10;break;
            case 'B':t=(t<<4)+11;break;
            case 'C':t=(t<<4)+12;break;
            case 'D':t=(t<<4)+13;break;
            case 'E':t=(t<<4)+14;break;
            case 'F':t=(t<<4)+15;break;
        }c=getchar();
    }printf("%d\n",t);
   
    return 0;
}
发表于 2023-09-24 17:34:46 回复(1)
#include <stdio.h>
#include <string.h>
#include <math.h>

int main(void)
{
    char str[50] = {0};
    int i = 0,ShiJinZhi = 0,len;
    
    gets(str);    
    len = strlen(str);
    while(len-- > 2)
    {
        if(str[len] >= 'a' && str[len] <= 'z')
        {
            str[len] = (int)str[len] - 87;
        }
        else if(str[len] >= 'A' && str[len] <= 'Z')
        {
            str[len] = (int)str[len] - 55;
        }
        else if(str[len] >= '0' && str[len] <= '9')
        {
            str[len] = (int)str[len] - 48;
        }
        ShiJinZhi += str[len]*pow(16,i);
        i++;
    }
    printf("%d",ShiJinZhi);
    
    return 0;
}
 
发表于 2023-09-10 21:24:32 回复(0)
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char str[100]={0};
    int result=0,index=0;
    scanf("%s",str);
    int len=strlen(str);
    for(int i=len-1;i>=2;i--)
    {
        if(str[i]>='0'&&str[i]<='9')//数字0~9
            result+=(int)((str[i]-'0')*pow(16, index));
        else//字母A~F
        {
            switch (str[i]-'A')
            {
                case 0:
                    result+=(int)(10*pow(16, index));
                    break;
                case 1:
                    result+=(int)(11*pow(16, index));
                    break;
                case 2:
                    result+=(int)(12*pow(16, index));
                    break;
                case 3:
                    result+=(int)(13*pow(16, index));
                    break;
                case 4:
                    result+=(int)(14*pow(16, index));
                    break;
                case 5:
                    result+=(int)(15*pow(16, index));
                    break;
            }
        }
        index++;
    }
    printf("%d\n",result);
    return 0;
}
发表于 2023-08-29 18:35:47 回复(0)
/**  题目:HJ5 进制转换
  *  思路:数据用 %x 十六进制输入,输出 %d 十进制
  *  难点:内置的十六进制输入和十进制输出
  */
#include <stdio.h>

int main() {
    int num;

    scanf("%x", &num);

    printf("%d", num);

    return 0;
}

/**  题目:HJ5 进制转换
  *  思路:输入数据用字符串存储,从第三位字符开始遍历字符串,用秦九韶算转化进制
  *  难点:字符串的 abcdef 、ABCDEF 和 0123456789 如何转化为十进制数
  */
#include <stdio.h>
#include <string.h>

int main() {
    char str[20];
    int num = 0;
    int len;

    gets(str);
    len = strlen(str);

    // 用秦九韶算法转化进制,分情况讨论: aA、bB、cC、dD、eE、fF分开讨论,0123456789 转化为数字后表示 48~57,减去48
    for(int i = 2; i < len; i++) {
        switch (str[i]) {
            case 'a':
            case 'A':
                num = num * 16 + 10;
                break;
            case 'b':
            case 'B':
                num = num * 16 + 11;
                break;
            case 'c':
            case 'C':
                num = num * 16 + 12;
                break;
            case 'd':
            case 'D':
                num = num * 16 + 13;
                break;
            case 'e':
            case 'E':
                num = num * 16 + 14;
                break;
            case 'f':
            case 'F':
                num = num * 16 + 15;
                break;
            default:

                //  字符中的 0123456789 转化为 int 型后表示 48 ~ 57,-48 即可表示 0 ~ 9
                num = num * 16 + ((int)str[i] - 48);
                break;
        }
    }

    printf("%d", num);

    return 0;
}

发表于 2023-03-26 19:08:04 回复(0)
#include <stdio.h>
#include <string.h>

int main() {
    long num_16;
    scanf("%x",&num_16);
    printf("%d",num_16);
    return 0;
}

发表于 2023-03-25 22:20:05 回复(1)
第一次独立完成哈哈哈哈
#include <stdio.h>

int main() {

    int a;

    scanf("%x",&a);
    printf("%d",a);
    
    return 0;
}


发表于 2023-02-28 21:27:19 回复(0)
stdlib.h头文件中含字符串转数字的函数
#include <stdio.h>
#include <stdlib.h>
#define LEN 50

int main()
{
    char str[LEN];
    char* end;
    long value;

    while (fgets(str, LEN, stdin) != NULL)
    {
        str[0] = str[0] = '0';
        value = strtol(str, &end, 16);
        printf("%ld\n", value);
    }

    return 0;
}


发表于 2023-02-24 15:37:08 回复(0)
#include<stdio.h>
// #include<math.h>
int get_lengh(char str[]){
    int count=0;
    while( *str++ != '\0'){
        count++;
    }
    return count;
}
//计算 d的z次方
int squr(int d,int z){
    int sum=1;
    for(int i=0;i<z;i++){
        sum *= d;
    }
    return sum;
}

int main()
{
    char str[10];
    gets(str);
    int lengh = get_lengh(str);
    int result=0;
    if(str[0] == '0' && str[1] == 'x'){
        int i = 2;
        for(i=2 ; i<lengh ;i++ ){
            if('A'<=str[i]&&str[i]<='F'){
                result += (str[i]-55)*squr(16,lengh-i-1);
            }
            if('a'<=str[i]&&str[i]<='f'){
                result +=(str[i]-87)*squr(16,lengh-i-1);
            }
            if('0'<=str[i]&&str[i]<='9'){
                result += (str[i]-48)*squr(16,lengh-i-1);
            }
        }
    }else{
        return 0;
    }
    printf("%d\n",result);
    return 0;
}
我还是浅浅的做了下

发表于 2023-02-23 01:42:58 回复(0)
#include <stdio.h>

int main() {
    int a = 0;

    getchar();

    getchar();

    scanf("%x", &a);

    printf("%d", a);

    return 0;
}
发表于 2022-11-27 21:55:26 回复(1)
#include <stdio.h>

int main() {
    unsigned int a, b;
    scanf("0x%x", &a);
    printf("%u\n", a);
    return 0;
}

这就通过了?

发表于 2022-11-13 13:26:15 回复(0)
如果说不自己写进制转换方法,直接用c的十六进制写入,十进制打印就行了

#include <stdio.h>

int main(void) {
    int n;
    scanf("%X",&n);
    printf("%d",n);
}
发表于 2022-11-10 17:29:37 回复(0)
int main(void){
    int input = 0;
    scanf("%x", &input);
    printf("%d",input);
}

发表于 2022-08-24 18:55:53 回复(0)
#include <stdio.h>
#include <string.h>
#include <math.h>

int hexToDec(const char *str) {
    int ans = 0, t = 0;
    for (int i = strlen(str) - 1; str[i]; i--) {
        if (str[i] >= '0' && str[i] <= '9') {
            ans += (str[i] - '0') * pow(16, t++);
        } else {
            ans += (str[i] - 'A' + 10) * pow(16, t++);
        }
    }
    return ans;
}

int main() {
    char str[10] = {0};
    while (~scanf("0x%s", str)) {
        getchar();
        printf("%d\n", hexToDec(str));
    }
    return 0;
}

发表于 2022-08-07 22:18:19 回复(0)
#include <stdio.h>

int main()
{
    unsigned int value;
    
    scanf("%x", &value);
    printf("%u\n",value);
    
    return 0;
}
发表于 2022-07-30 12:34:41 回复(0)

问题信息

难度:
51条回答 161586浏览

热门推荐

通过挑战的用户

查看代码