- 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
| ||||||||||
虽然有警告,但是基本正确,欢迎大家前来讨论,本人能力也有限,但会尽量改进。