实验9-10:进制转换

  1. 1. 实验9-10:进制转换

编写函数int conv(char hex[])将16进制的数字字符串转换为十进制整数,要求主函数中输入16进制数字字符串,调用conv函数输出其十进制整数。16进制数字字符串的位数要求在6位以下,1位以上,并以H或h结尾。

请只提供子函数的编写。

【样例输入】

57ABH

【样例输出】

22443

#include  <stdio.h>
#include  <stdlib.h>
int  conv(char  hex[]);
int  main()
{
        int  m;
        char  hex[7];
        scanf("%s",hex);
        m=conv(hex);
        if(m==-1)
                printf("输入有误!");
        else
                printf("%d\n",m);
}
int conv(char hex[])
{
    int length=0;
    int n=0;
    int num=0;
   length=strlen(hex);
  
   if(hex[length-1]!='H' && hex[length-1]!='h')
   {
        num=-1;
        return num;
   }
   else
  {
       n=length;
     for(int i=n-1;i>=0;i--)
    {     
      if(hex[i]>='0'&&hex[i]<='9')
    {
    num+=(hex[i]-'0')*pow(16,n-i-2);
    }
    else if(hex[i]>='A'&&hex[i]<='F')
    {
     num+=(10+(hex[i]-'A'))*pow(16,n-i-2);
     }
     else if(hex[i]>='a'&&hex[i]<='f')
     {
      num+=(10+(hex[i]-'a'))*pow(16,n-i-2);
     }
  } 


return num;
}
}

下载源文件
得分10.00   最后一次提交时间:2023-05-28 11:59:44
成功编译,但有警告信息.
main.c: In function 'conv':
main.c:20:4: warning: implicit declaration of function 'strlen' [-Wimplicit-function-declaration]
length=strlen(hex);
^
main.c:20:11: warning: incompatible implicit declaration of built-in function 'strlen' [enabled by default]
length=strlen(hex);
^
main.c:34:5: warning: implicit declaration of function 'pow' [-Wimplicit-function-declaration]
num+=(hex[i]-'0')*pow(16,n-i-2);
^
main.c:34:23: warning: incompatible implicit declaration of built-in function 'pow' [enabled by default]
num+=(hex[i]-'0')*pow(16,n-i-2);
^
main.c:38:29: warning: incompatible implicit declaration of built-in function 'pow' [enabled by default]
num+=(10+(hex[i]-'A'))*pow(16,n-i-2);
^
main.c:42:30: warning: incompatible implicit declaration of built-in function 'pow' [enabled by default]
num+=(10+(hex[i]-'a'))*pow(16,n-i-2);
^
共有测试数据:4
平均占用内存:1.210K    平均运行时间:0.00309S
 
测试数据评判结果
测试数据1完全正确
测试数据2完全正确
测试数据3完全正确
测试数据4完全正确

虽然有警告,但是基本正确,欢迎大家前来讨论,本人能力也有限,但会尽量改进。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值