赞
踩
刷题笔记
题目:
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
其实这道基础题可以采用进制输入输出格式直接解题,代码如下:代码片
#include<stdio.h>
int main()
{
int n;
scanf("%X",&n);//输入十六进制
printf("%lld",n);//输出十进制
return 0;
}
当然,如果你想通过算法进行转换也是可以的,这样可以让你对进制转换的过程以及理解会有更好的帮助。代码如下:代码片
#include<stdio.h> #include<string.h> #include<math.h> int f(char s[]) //16进制转10进制 { long long ans=0; int i,j=0; int len=strlen(s);//字符串的长度 /* for(int i=0;i<len;i++){ //遍历字符串 if(s[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; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。