有关下列问题输出没有结果,求指点
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
F
样例输出
65535
#include <stdio.h>
#include <math.h>
#define N 10
int main() {
int HexToDem(char ch[]);
char hex[N];
scanf("%s",hex[N]);
HexToDem(hex);
return 0;
}
int HexToDem(char ch[]) {
int num;
int Dem(char ch);
int i,n;
for(i=0;i<8;i++) {
n=Dem(ch[i]);
num+=Dem(ch[i])*pow(16,i);
}
printf("%d",&num);
}
int Dem(char ch) {
if(ch>='0'&&ch<='9') {
return ch-'0';
}
switch(ch) {
case 'A':
return 10;
case 'B':
return 11;
case 'C':
return 12;
case 'D':
return 13;
case 'E':
return 14;
case 'F':
return 15;
}
return -1;
}
#include <stdio.h>
#include <math.h>
#define N 10
int HexToDem(char ch[]);
int Dem(char ch);
int main()
{
char hex[N];
scanf("%s", hex);
printf("%d\n", HexToDem(hex));
return 0;
}
int HexToDem(char ch[])
{
int num = 0;
const char *p = ch;
while (*p)
{
num = num * 16 + Dem(*p);
p++;
}
return num;
}
int Dem(char ch)
{
if (ch >= '0' && ch <= '9')
{
return ch - '0';
}
switch (ch)
{
case 'A':
return 10;
case 'B':
return 11;
case 'C':
return 12;
case 'D':
return 13;
case 'E':
return 14;
case 'F':
return 15;
}
return -1;
}
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
char num[17]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char input[10];
unsigned int n,i,j,k=0;
gets(input);
n=strlen(input);
for(i=0;i<n;i++)
{
for(j=0;j<17;j++)
{
if(input[i]==num[j])
{
k+=j*pow(16,n-i-1);
}
}
}
printf("%u",k);
return 0;
}
思路:定义一个数组,利用输入数据和定义数组进行比较,得出相同的下标即为对应的数的大小。然后用K来存储结果。16进制转换为10进制
注意:
1.定义的数组的个数为16,为了防止数组越界,这里num的下标要给到17
2.尽管此题没有给到数据的范围。但是我经过测试发现,如果以%d输出会发现数据溢出,因此我们要以%u(十进制无符号整数)来输出即可
#include<stdio.h>
int main()
{
char a[9];
int i,pos=0;
long sum=0;
do
{
scanf("%c",&a[pos]);
}while(a[pos++]!='\n');
for(i=0;i<pos-1;i++)printf("%c",a[i]); //若不需要,此行及下一行可以删除
printf("H=");
for(i=0;i<pos-1;i++)
{
if(a[i]>='a'&&a[i]<='f')a[i]-='a'-'A';
if(a[i]>='0'&&a[i]<='9')
sum=sum*16L+(a[i]-'0');
else
sum=sum*16L+(a[i]-'A'+10);
}
printf("%ld\n",sum);
return 0;
}