大家好,欢迎来到IT知识分享网。
问题描述:
输入一个十六进制数,输出相应的十进制数。
示例:
输入:a11
输出:2577
方法:将十六进制存储到字符串数组中,依次遍历每个字符,根据进制转换公式计算出相应的十进制。a或A的十进制为10,所以要用字符的ASCII码减去对应的数之后才用来计算。如:’a’-87=10,’b’-87=11…‘A’-55=10,‘B’-55=11;
进制转换公式:举例 :a11=10(a)*16^2+1*16^1+1*16^0=2577。用当前的数乘以基数的次方,16进制,所以基数是16,次方是位置-1。位置从右往左数。
代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<string.h> #include<math.h> int caculate(char str[],int n) { int i, num = 0; for (i = 0; str[i] != '\0'; i++) { if (str[i] >= 'a' && str[i] <= 'z') {//判断是大写还是小写,要通过ASCII值计算 num += (str[i] - 87) * (pow(16, --n));//小写要减87,然后乘以基数的次方, //次方是位置-1 } else if (str[i] >= 'A' && str[i] <= 'Z') { num += (str[i] - 55) * pow(16, --n);//大写要减55 } else { num += (str[i]-48) * pow(16, --n);//数字,但还是字符形式的数字,所以要减48, //ASCII中48为‘0’ } } return num; } int main() { char str[32]; printf("请输入16进制:"); gets(str); printf("该16进制的十进制数为:%d\n", caculate(str, strlen(str)));//srtlen(str)计算长度, //为16的次方做准备 return 0; }
运行结果截图:
16进制用大小写都可以,上面代码中都有相应的判断。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/149423.html