发布网友 发布时间:2022-07-25 17:19
共2个回答
热心网友 时间:2023-10-14 07:09
#include<stdio.h>
#define MAXCHAR 101
int char_to_num(char ch);
char num_to_char(int num);
long source_to_decimal(char temp[],int source);
int decimal_to_object(char temp[],long decimal_num,int object);
void output(char temp[],int length);
int main()
{
int source;
int object;
int length;
long decimal_num;
char temp[MAXCHAR];
int flag=1;
while(flag){
printf("转换前的数是:");
scanf("%s",temp);
printf("转换前的数制是:");
scanf("%d",&source);
printf("转换后的数制是:");
scanf("%d",&object);
printf("转换后的数是:");
decimal_num=source_to_decimal(temp,source);
length=decimal_to_object(temp,decimal_num,object);
output(temp,length);
printf("请继续输入1,否则输入0:\n");
scanf("%d",&flag);
}
return 0;
}
int char_to_num(char ch)
{
if(ch>='0' && ch<='9')
return ch-'0';
else
return ch-'A'+10;
}
char num_to_char(int num)
{
if(num>=0 && num<=9)
return (char)('0'+num-0);
else
return (char)('A'+num-10);
}
long source_to_decimal(char temp[],int source)
{
long decimal_num=0;
int i;
for(i=0;temp[i];i++)
decimal_num=(decimal_num*source)+char_to_num(temp[i]);
return decimal_num;
}
int decimal_to_object(char temp[],long decimal_num,int object)
{
int i=0;
while(decimal_num)
{
temp[i]=num_to_char(decimal_num%object);
decimal_num=decimal_num/object;
i++;
}
temp[i]='0';
return i;
}
void output(char temp[],int length)
{
int i;
for(i=length-1;i>=0;i--)
printf("%c",temp[i]);
printf("\n");
}
追问直到今天才看到了
热心网友 时间:2023-10-14 07:10
说说你的问题不知道是不是你复制少了错误问题:1你的Change函数缺少括号最后添加一个大括号2main里面调用Change缺少参数改为Change(a,s);3Change函数中q为存储字符的值改为*(q+i)4Judge中判断问题只判断了一个然后是规范的问题:1Judge函数中的p[i]最好用指针改为*(p+i)2判断条件p[i]='0'||p[i]='a'||p[i]='A'添加括号改为(p[i]='0')||(p[i]='a')||(p[i]='A')然后是可以优化的问题:1乘法很消耗资源对于一个数乘以2^n可以替换为左移n位前提是不会溢出2可以把Judge放到Change里面你其实Change里面判断时候就隐含了字符的判断下面是我写的,运行测试无问题:#include"stdio.h"int hex2Dec(char *c,int len){int n=0,i,sum=0;for(i=0;i='0'&&*(c+i)='a'&&*(c+i)='A'&&*(c+i)<='F'){n=*(c+i)-'A'+10;}else{printf("input illegal!");exit(-1);}sum=sum<<4;sum=sum+n;}return sum;}int main(){char c[5];scanf("%s",c);printf("the hex:%s conver to dec is %d\n",c,hex2Dec(c,4));return 1;}