#include<stdio.h>
#include<stdlib.h>
main() {
char a[100],c[100];
int b[100];
int i,k=0,e=16,w,q=0,g,p;
for(i=0; i<100; i++) {
a[i]=getchar();
if(a[i]=='\n') {
w=--i;
break;
}
q++;
}
for(i=0; i<q; i++) {
if(a[w]=='A'||a[w]=='a')
b[i]=10;
else if(a[w]=='B'||a[w]=='b')
b[i]=11;
else if(a[w]=='C'||a[w]=='c')
b[i]=12;
else if(a[w]=='D'||a[w]=='d')
b[i]=13;
else if(a[w]=='E'||a[w]=='e')
b[i]=14;
else if(a[w]=='F'||a[w]=='f')
b[i]=15;
else
b[i]=a[w]-48;
if(b[i]<0||b[i]>15) {
c[i]=a[w];
p=5;
printf("a[w]=%d",a[w]);
g=5;
}
printf("%d",b[i]);
w--;
}
if(g==5) {
printf("“");
for(i=--q; i>=0; i--) {
if(p==5) {
printf("%c",c[i]);
} else {
b[i]=b[i]+48;
printf("%d",b[i]);
}
}
printf("”不在十六进制范围内!");
return 0;
}
for(i=0; i<q; i++) {
if(i==0) {
e=1;
} else {
e=e*16;
}
b[i]=b[i]*e;
printf("\tb[i]=%d-e=%d",e,b[i]);
}
for(i=0; i<q; i++) {
k=k+b[i];
}
printf("\tk=%d",k);
}
您好,根据您的意思是希望将十六进制数字转为十进制数字。但是没有太看明白代码里的具体每个变量的意思。
我这里重新写了一个十六进制转十进制的C代码,希望可以帮到您。
#include<stdio.h>
#include<stdlib.h>
main() {
char a[100];
int i, num = 0;
for(i=0; i<100; i++) {
a[i]=getchar();
if(a[i]=='\n') {
a[i] = '\0';
break;
}
num++;
}
long long ans = 0;
if(num > 16){
printf("输入长度超过限制,请输入16位以内的十六进制数字。\n");
return 1;
}
for(i = 0; i < num; i++){
if(a[i] >= '0' && a[i] <= '9'){
ans = ans * 16 + a[i] - '0';
}
else if(a[i] >= 'a' && a[i] <= 'f'){
ans = ans * 16 + a[i] - 'a' + 10;
}
else if(a[i] >= 'A' && a[i] <= 'F'){
ans = ans * 16 + a[i] - 'A' + 10;
}
else{
printf("你的输入字符串%s有误,不属于十六进制的范畴。\n", a);
return 1;
}
}
printf("输入的十六进制%s,得到的十进制数字是:%lld\n", a, ans);
return 0;
}
敢学c的都是脑子很聪明的啊
您好,我是问答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632