
帮忙检查一个c语言程序:将一个十六进制整数转化成十进制整数的程序。
#include<stdio.h>#include<string.h>#include<math.h>voidmain(){voidfunc(chars[],int);c...
#include<stdio.h> #include<string.h> #include<math.h> void main(){ void func(char s[],int ); char a[20]; int n; printf("请输入一串十六进制数:"); scanf("%s",a); n=strlen(a); func(a,n); printf("%s",a); } void func(char s[],int x){ int i; for(i=x-1;i>=0;i--){ if(s[i]>='0'&&s[i]<='9'){ s[i]=(s[i]-'0')*pow(16,i-x-1); } if(s[i]>='a'&&s[i]<='f'){ s[i]=(s[i]-'a'+10)*pow(16,i-x-1); } if(s[i]>='A'&&s[i]<='F'){ s[i]=(s[i]-'A'+10)*pow(16,i-x-1); } } } 我觉得在赋值给s[i]出了问题,但是不会改了。。。
展开
1个回答
展开全部
程序有以下两个问题:
1、func函数中所有的i-x-1都应该改成x-i-1。楼主的意思就是乘以16的对应的位数次方呗,你仔细看看就知道应该是x-i-1
2、我们假设十位上是的数字是1,那么这个数代表了16,这时候用一个字符是无法表示的
也就是说,不能简单的用s[i]去存放原16进制的某位转换成10进制对应的数
一个简单的修改方法是,让func函数返回一个int型的数值,这个返回值就是对应的十进制数
具体代码见下
#include<stdio.h>
#include<string.h>
#include<math.h>
int
func(char
s[],int
x);
void
main()
{
char
a[20];
int
n;
int
num;
printf("请输入一串十六进制数:");
scanf("%s",a);
n=strlen(a);
num=func(a,n);
printf("%s=%d",a,num);
}
int
func(char
s[],int
x)
{
int
i;
int
num=0;
for(i=x-1;i>=0;i--)
{
if(s[i]>='0'&&s[i]<='9')
{
num+=(int)((s[i]-'0')*pow(16,x-i-1));
}
if(s[i]>='a'&&s[i]<='f'){
num+=(int)((s[i]-'a'+10)*pow(16,x-i-1));
}
if(s[i]>='A'&&s[i]<='F'){
num+=(int)((s[i]-'A'+10)*pow(16,x-i-1));
}
}
return
num;
}
1、func函数中所有的i-x-1都应该改成x-i-1。楼主的意思就是乘以16的对应的位数次方呗,你仔细看看就知道应该是x-i-1
2、我们假设十位上是的数字是1,那么这个数代表了16,这时候用一个字符是无法表示的
也就是说,不能简单的用s[i]去存放原16进制的某位转换成10进制对应的数
一个简单的修改方法是,让func函数返回一个int型的数值,这个返回值就是对应的十进制数
具体代码见下
#include<stdio.h>
#include<string.h>
#include<math.h>
int
func(char
s[],int
x);
void
main()
{
char
a[20];
int
n;
int
num;
printf("请输入一串十六进制数:");
scanf("%s",a);
n=strlen(a);
num=func(a,n);
printf("%s=%d",a,num);
}
int
func(char
s[],int
x)
{
int
i;
int
num=0;
for(i=x-1;i>=0;i--)
{
if(s[i]>='0'&&s[i]<='9')
{
num+=(int)((s[i]-'0')*pow(16,x-i-1));
}
if(s[i]>='a'&&s[i]<='f'){
num+=(int)((s[i]-'a'+10)*pow(16,x-i-1));
}
if(s[i]>='A'&&s[i]<='F'){
num+=(int)((s[i]-'A'+10)*pow(16,x-i-1));
}
}
return
num;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询