我是靠谱客的博主 健康大神,最近开发中收集的这篇文章主要介绍BASIC-11 十六进制转十进制(无符号变量 字符串数组指针)题目:输入一个十六进制数,输出十进制数。,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题描述
  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
6553

说明:第一次引用了太多变量 ,代码质量不高

#include<stdio.h>
unsigned int fun(char c[9])
//函数类型可以是int,因为输出按无符号输出
{
unsigned int i,j,k,a,b=1,sum=0;	//十六进制的八位最大值=2^32-1,故用无符号
for(i=0;c[i]!='';i++);
//求出位数
k=i;
//用于循环求指数
for(;i>0;i--)
//从低位开始循环
{
if(c[i-1]>='A')
//判断是否为10~15
{
a=c[i-1]-'A'+10;
//求该位的十进制数值
j=i;
//求位数对应指数的循环变量
for(;j<k;j++)
b=b*16;
//求出位数对应指数
sum=sum+a*b;
//求出该数的转换
b=1;
//每次循环重新赋值
}
else
{
a=c[i-1]-'0';
j=i;
for(;j<k;j++)
b=b*16;
sum=sum+a*b;
b=1;
}
}
return sum;
}
int main()
{
char c[9];
//字符串最长为八,加个''
gets(c);
//字符串输入函数
printf("%u",fun(c));
//无符号输出
return 0;
}

说明:对代码进行优化,减少变量,只用一层循环

#include<stdio.h>
unsigned int fun(char c[9])
{
unsigned int i,a,b=1,sum=0;
for(i=0;c[i]!='';i++);
for(;i>0;i--)
{
if(c[i-1]>='A')
{
a=c[i-1]-'A'+10;
sum=sum+a*b;
b=b*16;
}
else
{
a=c[i-1]-'0';
sum=sum+a*b;
b=b*16;
}
}
return sum;
}
int main()
{
char c[9];
gets(c);
printf("%u",fun(c));
return 0;
}

说明:从高位开始运算,利用指针进行优化

#include<stdio.h>
unsigned int fun(char *p)
{
int a,sum=0;
while(*p)
//遇到''结束
{
if(*p>='A')
{
a=*p-'A'+10;
sum=sum*16+a;	//从高位开始循环
}
else
{
a=*p-'0';
sum=sum*16+a;
}
p++;
}
return sum;
}
int main()
{
char c[9];
gets(c);
printf("%u",fun(c));
return 0;
}

题目:输入一个十六进制数,输出十进制数。

说明:代码更灵活.

#include<stdio.h>
#define MAX 1000
int main()
{
int htoi(char s[]);
int i,c,flag,flag1;
char t[MAX];
i=0;
flag=0;
flag1=1;
printf("input a HEX number:");
while((c=getchar())!='' && i<MAX && flag1)
{
if(c>='0' && c<='9' || c>='a' && c<='f' || c>='A' && c<='F')
{
flag=1;
t[i++]=c;
}
else if(flag)
{
t[i]='';
printf("decimal number %dn",htoi(t));
printf("continue or not (Y/N)?");
c=getchar();
if(c=='n' || c=='N')
flag1=0;
else
{00
flag=0;
i=0;
printf("ninput a HEX number:");
}
}
}
return 0;
}
int htoi(char s[])
{
int i,n;
n=0;
for(i=0;s[i]!='';i++)
{
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
n=n*16+s[i]-'A'+10;
}
return n;
}

最后

以上就是健康大神为你收集整理的BASIC-11 十六进制转十进制(无符号变量 字符串数组指针)题目:输入一个十六进制数,输出十进制数。的全部内容,希望文章能够帮你解决BASIC-11 十六进制转十进制(无符号变量 字符串数组指针)题目:输入一个十六进制数,输出十进制数。所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部