描述
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
数据范围:保证结果在 1≤n≤231−1 1≤n≤231−1
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。不同组的测试用例用\n隔开。
示例1
输入:
0xAA
输出:
170
实现代码:
#include "string.h"
#include "stdio.h"int main()
{char str[1000];scanf("%s",str);int len=strlen(str);int num=0,sum=0;for(int i=0; i<len; i++){if(str[i]>='0'&&str[i]<='9')num=str[i]-'0';else if (str[i]>='A'&&str[i]<='F') {num=str[i]-'A'+10;}sum=sum*16+num;}printf("%d",sum);}
时间复杂度:O(n)
思路:
1.将输入的十六进制当作字符串,放入数组str[]中
2.算出每一位对应的十进制大小,可分为在0-9之间与A-F之间的两种情况讨论
3.根据十六进制转换成十进制的规则巧妙利用循环进行转换
当然C语言中本身存在进制转换规则:
代码:
#include "string.h"
#include "stdio.h"int main(void)
{int num=0;while(scanf("%i\n",&num)!=-1){printf("%d\n",num);}return 0;
}
题目来源:进制转换_牛客题霸_牛客网