基础练习 十六进制转十进制

刷题笔记
题目:

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

样例输入
FFFF

样例输出
65535

其实这道基础题可以采用进制输入输出格式直接解题,代码如下:代码片

#include
int main() 
{ 
	int n;
	scanf("%X",&n);//输入十六进制 
	printf("%lld",n);//输出十进制 
	return 0;
}

当然,如果你想通过算法进行转换也是可以的,这样可以让你对进制转换的过程以及理解会有更好的帮助。代码如下:代码片

#include
#include
#include
int f(char s[]) //16进制转10进制 
{
	long long ans=0;
  int i,j=0;  
  int len=strlen(s);//字符串的长度 
/* 
 for(int i=0;i='A'&&s[i]<='F') //把字符字母的部分换成数字,如当 s[i]='B'时 'B'-'A'+10=1+10=11
   ans=ans*16+s[i]-'A'+10;
    else
    ans=ans*16+s[i]-'0';//把字符数字的部分换成数字,如当 s[i]='2'时 '2'-'0'=2                       //'2'的ASCII为50,'0'的ASCII为48,所以50-48=2  
  }  
  */ 
  
  
//上面是正向思维,下面是逆向思维 
	for(i=len-1;i>=0;i--){
		if(s[i]>='A'&&s[i]<='F')
		ans+=(s[i]-'A'+10)*pow(16,j);
		else
		ans+=(s[i]-'0')*pow(16,j);
		j++;
	}            
  return ans;//函数返回的值
} 
int main()
{
  char t[100]; 
  gets(t);//输入 
  printf("%lld",f(t));//f(t)是函数调用,调用完后输出返回的值 
  return 0;
} 

你可能感兴趣的:(#,蓝桥杯,c语言)