经典例题:十六进制转换十进制详解 适合初学者

简介: 经典例题:十六进制转换十进制详解 适合初学者

任务描述


 字符串转换成十进制整数。 输入一个以 # 结束的字符串,滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果过滤后字符串的首字符为 “−”,代表该数是负数。


输入


 输入一行字符,以 # 结束。注:输入的字符中十六进制的字符数不得超过 8 个。


输出


 输出转换后的十进制数。


测试说明


测试用例 1


 输入:    zx1?ma0!kbq#   输出:    6667


测试用例 2


 输入:    +z--x1?ma0!kbq#   输出:    -6667


#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int cyr(char s[]);
int main()
{
  int i = 0, j=0, k;
  char a[100], s[100];//定义双数组,一个负责输入十进制数,一个负责存放转化后的数字
  while ((a[i] = getchar()) != '#')
  {
    if (a[i] >= '0' && a[i] <= '9')//分情况,数字,小写字母和大写字母
    {
      s[j] = a[i];
      j++;//定义变量j作为s[]的下标,便于之后运算
    }
    else if (a[i] >= 'a' && a[i] <= 'f')
    {
      s[j] = a[i];
      j++;
    }
    else if (a[i] >= 'A' && a[i] <= 'F')
    {
      s[j] = a[i];
      j++;
    }
    else if (a[i] == '-')
    {
      s[j] = a[i];
      j++;
    }
    i++;
    if (i == 100)//字符串长度缩到一百之内
      break;
  }
  a[i] = '\0';
  s[j] = '\0';//字符串结束标志,本题加或不加均可,但是还是要规范写
  cyr(s);
  return 0;
}
int cyr(char s[])//函数部分,实现转化
{
  int i = 0, n = 0, flag = 1;//定义flag用来实现负数的运算
  if (s[0] == '-')
  {
    flag = -1;//如果'-'在前,就加上符号
  }
  while (s[i] != '\0') {
    if (s[i] >= '0' && s[i] <= '9')
      n = n * 16 + s[i] - '0';
    else if (s[i] >= 'a' && s[i] <= 'f')
      n = n * 16 + s[i] - 'a'+10;//这里加10是因为在16进制中a代表10
    else if (s[i] >= 'A' && s[i] <= 'F')
      n = n * 16 + s[i] - 'A'+10;
    i++;//i++很重要,不要漏掉
  }
  printf("%d", n * flag);
  return n;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int cyr(char s[]);
int main()
{
    int i = 0, j=0, k;
    char a[100], s[100];
    while ((a[i] = getchar()) != '#')
    {
        if (a[i] >= '0' && a[i] <= '9')
        {
            s[j] = a[i];
            j++;
        }
        else if (a[i] >= 'a' && a[i] <= 'f')
        {
            s[j] = a[i];
            j++;
        }
        else if (a[i] >= 'A' && a[i] <= 'F')
        {
            s[j] = a[i];
            j++;
        }
        else if (a[i] == '-')
        {
            s[j] = a[i];
            j++;
        }
        i++;
        if (i == 100)
            break;
    }
    a[i] = '\0';
    s[j] = '\0';
    cyr(s);
    return 0;
}
int cyr(char s[])
{
    int i = 0, n = 0, flag = 1;
    if (s[0] == '-')
    {
        flag = -1;
    }
    while (s[i] != '\0') {
        if (s[i] >= '0' && s[i] <= '9')
            n = n * 16 + s[i] - '0';
        else if (s[i] >= 'a' && s[i] <= 'f')
            n = n * 16 + s[i] - 'a'+10;
        else if (s[i] >= 'A' && s[i] <= 'F')
            n = n * 16 + s[i] - 'A'+10;
        i++;
    }
    printf("%d", n * flag);
    return n;
}




相关文章
十进制与二进制、八进制、十六进制之间的互相转换,本文让你全部理清
十进制与二进制、八进制、十六进制之间的互相转换,本文让你全部理清
697 0
十进制与二进制、八进制、十六进制之间的互相转换,本文让你全部理清
|
1月前
|
存储
进制的基本介绍以及进制转换和计算
进制的基本介绍以及进制转换和计算
23 0
|
1月前
|
C语言
c语言编程练习题:7-28 求整数的位数及各位数字之和
c语言编程练习题:7-28 求整数的位数及各位数字之和
38 0
|
1月前
|
存储 C++
【软件设计师备考 专题 】数制基础:二进制、十进制和十六进制的理解与转换
【软件设计师备考 专题 】数制基础:二进制、十进制和十六进制的理解与转换
17 1
|
1月前
|
小程序 C语言
【C语言】输入一个十进制正整数,将它对应的二进制数的各位逆序,形成新的十进制数输出。题目分析及拓展应用。
【C语言】输入一个十进制正整数,将它对应的二进制数的各位逆序,形成新的十进制数输出。题目分析及拓展应用。
66 0
|
1月前
|
存储 Java 程序员
基本概念【变量和数据类型和运算符、二进制和十进制、十进制转二进制 、二进制转十进制 】(一)-全面详解(学习总结---从入门到深化)
基本概念【变量和数据类型和运算符、二进制和十进制、十进制转二进制 、二进制转十进制 】(一)-全面详解(学习总结---从入门到深化)
40 0
|
1月前
|
机器学习/深度学习 C语言
c语言编程练习题:7-47 二进制的前导的零
c语言编程练习题:7-47 二进制的前导的零
22 0
|
1月前
|
存储
【二进制转换】十进制 转 二进制 (含相关题型)
【二进制转换】十进制 转 二进制 (含相关题型)
35 0
|
11月前
|
算法 Java C#
转:16进制转10进制算法各编程语言代码咋写?
在 C# 中,可以使用 Convert.ToInt32() 函数将 16 进制数转换为 10 进制数。该函数需要两个参数,第一个参数是要转换的 16 进制数,第二个参数是基数(即进制)。
127 1
|
存储 C语言
【C语言_复习_学习第二课】什么是进制?进制之间应该如何转换
什么是进制?在我们的生活中处处充满进制,一天是24个小时、一个小时是60分钟、一分钟是60秒、一个星期一共7天........还有大家听说过半斤八两这个词语吗?也就是说买半斤东西也就是八两,一斤也就是十六两,满16进一位这就是十六进制。我今天就当一次小学老师来考考你,5+8等于多少(我没有在和大家开玩笑)你会说等于13,你的回答就是十进制也就是满十进一,而在计算机中数字都是以二进制(只有1和0)存储的也就是满二进一位,当然也有八进制(从0到7)、十六进制(从0到F)都是类似的,八进制满八进一位,十六进制满十六进一位(其中十六进制10用A来表示,11-B、12-C、13-D、14-E、15-F)
88 0