描述
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
数据范围:保证结果在1≤n≤2^31−1
输入描述:
输入一个十六进制的数值字符串。(如0x11)
输出描述:
输出该数值的十进制字符串。不同组的测试用例用\n隔开。
示例1
输入:0xAA
输出:170
代码一:
//输入16进制的数值,前面加“0x”
#define _CRT_SECURE_NO_WARNINGS //加这句话是因为gets函数产生的问题
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main()
{
char shiliu[9]; //数据范围:保证结果在 1≤n≤2^31−1
int len,i,b;
int shi=0;
double a=16,ci;
gets(shiliu);
len=strlen(shiliu);
for(i=len-1;i>1;i--) //倒着来是因为进制算法
{
if(shiliu[i]=='13')
shiliu[i]=shiliu[i-1]; //gets函数会读入回车键,要去掉回车键
switch(shiliu[i])
{
case '0':shiliu[i]=0;break;
case '1':shiliu[i]=1;break;
case '2':shiliu[i]=2;break;
case '3':shiliu[i]=3;break;
case '4':shiliu[i]=4;break;
case '5':shiliu[i]=5;break;
case '6':shiliu[i]=6;break;
case '7':shiliu[i]=7;break;
case '8':shiliu[i]=8;break;
case '9':shiliu[i]=9;break;
case 'A':shiliu[i]=10;break;
case 'B':shiliu[i]=11;break;
case 'C':shiliu[i]=12;break;
case 'D':shiliu[i]=13;break;
case 'E':shiliu[i]=14;break;
case 'F':shiliu[i]=15;break;
default:printf("输入数值不对");
}
ci=pow(a,(len-1-i)); //pow函数括号的参数有数值类型要求
b=(int)ci; //ci是double型,转换成整数型
shi=shi+shiliu[i]*b;
}
printf("%d\n",shi);
system("pause");
}
代码二:
//直接输入16进制的数值,即前面不加“0x”
#define _CRT_SECURE_NO_WARNINGS //加这句话是因为gets函数产生的问题
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main()
{
char shiliu[9];
int len,i,b;
int shi=0;
double a=16,ci;
gets(shiliu);
len=strlen(shiliu);
for(i=len-1;i>=0;i--) //倒着来是因为进制算法
{
if(shiliu[i]=='13')
shiliu[i]=shiliu[i-1]; //gets函数会读入回车键,要去掉回车键
switch(shiliu[i])
{
case '0':shiliu[i]=0;break;
case '1':shiliu[i]=1;break;
case '2':shiliu[i]=2;break;
case '3':shiliu[i]=3;break;
case '4':shiliu[i]=4;break;
case '5':shiliu[i]=5;break;
case '6':shiliu[i]=6;break;
case '7':shiliu[i]=7;break;
case '8':shiliu[i]=8;break;
case '9':shiliu[i]=9;break;
case 'A':shiliu[i]=10;break;
case 'B':shiliu[i]=11;break;
case 'C':shiliu[i]=12;break;
case 'D':shiliu[i]=13;break;
case 'E':shiliu[i]=14;break;
case 'F':shiliu[i]=15;break;
default:printf("输入数值不对");
}
ci=pow(a,(len-1-i)); //pow函数括号的参数有数值类型要求
b=(int)ci; //ci是double型,转换成整数型
shi=shi+shiliu[i]*b;
}
printf("%d\n",shi);
system("pause");
}
注意:
1、没有 “#define _CRT_SECURE_NO_WARNINGS” 这句话时,可能会出现
错误 C4996 'gets': This function or variable may be unsafe. Consider using gets_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
错误信息的大意如下:
此函数或变量可能不安全。
可以使用scanf_s代替该函数。
如果要取消禁用,请定义_CRT_SECURE_NO_WARNINGS。
更多信息请查看在线帮助
解决办法:
错误中已有提示,只需要在程序的开头添加一个宏定义,即(注意这个宏定义要在#include <stdio.h>前面,否则还会报错)
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h>
3、数据类型之间的转换
4、数值的次方运算
5、ASCII码