帮忙检查一个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]出了问题,但是不会改了。。。
展开
 我来答
zhenfeipeng
2011-03-06 · TA获得超过221个赞
知道小有建树答主
回答量:84
采纳率:0%
帮助的人:125万
展开全部
程序有以下两个问题:
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;
}
百度网友99b336a
2011-03-06 · 超过18用户采纳过TA的回答
知道答主
回答量:100
采纳率:0%
帮助的人:59.1万
展开全部
pow(16, i-x+1)

另外,不要用s[i]保存结果,s[i]只是一个字符就一个字节,最大127
建议你用int保存结果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式