欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 每日一题——第八十五题

每日一题——第八十五题

2024/11/30 12:36:58 来源:https://blog.csdn.net/weixin_45778846/article/details/142092337  浏览:    关键词:每日一题——第八十五题

题目:写一个函数,输入一个十六进制/八进制数/二进制数,输出对应的十进制数

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
long stringToDecimal(const char* str, int base);int main() {char hexStr[] = "1A3F";char octStr[] = "123";char binStr[] = "101010";printf("十六进制转换成十进制:%ld\n", stringToDecimal(hexStr, 16));printf("八进制转换成十进制:%ld\n", stringToDecimal(octStr, 8));printf("二进制转换成十进制:%ld\n", stringToDecimal(binStr, 2));return 0;
}/// <summary>
/// 字符串转为十进制
/// </summary>
/// <param name="str">字符串</param>
/// <param name="base">基数</param>
/// <returns></returns>
long stringToDecimal(const char* str, int base) {long result = 0;int multiplier = 1;int len = strlen(str);//从字符串尾部开始解析for (int i = len - 1; i >= 0; i--){char c = tolower(str[i]);//将字符串转换为小写字母,简化处理int digit = -1;//根据字符计算其对应的值if ( c >= '0' && c <= '9') {digit = c - '0';//如果是十进制的数字字符,直接通过c - '0'得到digit}//十六进制情况else if (base == 16 && (c >= 'a' && c <= 'f')) {digit = c - 'a' + 10;//a ~ f在十六进制中代表10~15}else if (c < '0' || (c > '9' && base != 16) || (base == 16 && c > 'f')) {//这种情况是表示字符串出错,直接返回0return 0;}//检查是否在有效范围内if (digit >= base) {return 0;//非法范围内直接返回}//从最低位开始累加结果result += digit * multiplier;//更新下一次的相乘的基数multiplier *= base;//二进制multiplier = 2, 八进制multiplier = 8, 十六进制multiplier = 16}return result;}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com