c语言题目 以字符形式输入一个十六进制数,将其变换成一个十进制整数后输出

 我来答
benben239
2014-11-25 · TA获得超过864个赞
知道小有建树答主
回答量:612
采纳率:100%
帮助的人:486万
展开全部
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main(void)
{
 long int digital, len, times;
 char ch[50];
 while (true)
 {
  fputs("请输入一个十六进制数字 <#退出> : ", stdout);
  gets(ch);
  for (times = 1, len = strlen(ch) - 1, digital = 0; len >= 0; --len)
  {
   ch[len] = tolower(ch[len]);
   if (ch[len] >= 'a' && ch[len] <= 'f')
    digital += (ch[len] - 87) * times;
   else if (isdigit(ch[len]))
    digital += (ch[len] - 48) * times;
   else
   {
    puts("无法识别的十六进制!");
    break;
   }
   times *= 16;
  }
  printf("%s = %d\n\n", ch, digital);
 }
 return 0;
}

wm45904978
2014-11-25 · TA获得超过132个赞
知道答主
回答量:52
采纳率:0%
帮助的人:61.1万
展开全部
#include<stdio.h>
#include <string.h>

#define N 8

int main()
{
char data[N];
int sum = 0;
char is_error = 0;//标记输入的字符是否正确
int count = 0;
if (0 == scanf("%s", data, sizeof(data)))
{
is_error = 1;//读取错误
}
count = strlen(data);
for (int i = 0; i < count; ++i)
{
int num = 0;
if (data[i] >= 48 && data[i] <= 57)//0-9字符
{
num = data[i] - 48;
}
else if (data[i] >= 65 && data[i] <= 70)//A-F字符
{
num = data[i] - 65 + 10;
}
else if (data[i] >= 97 && data[i] <= 102)//a-f字符
{
num = data[i] - 97 + 10;
}
else//非法字符
{
is_error = 1;
}
for (int j = 1; j < count-i; ++j)
{
num *= 16;
}
sum += num;
}

if (1 == is_error)
{
printf("illegal string!\n");
}
else
{
printf("%d\n", sum);
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式