当前位置: 首页 > article >正文

每日一题——第八十五题

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

#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')) {
			//这种情况是表示字符串出错,直接返回0
			return 0;
		}

		//检查是否在有效范围内
		if (digit >= base) {
			return 0;//非法范围内直接返回
		}


		//从最低位开始累加结果
		result += digit * multiplier;

		//更新下一次的相乘的基数
		multiplier *= base;//二进制multiplier = 2, 八进制multiplier = 8, 十六进制multiplier = 16

	}

	return result;

}

http://www.kler.cn/a/297930.html

相关文章:

  • 基于单片机的室内装修环境检测系统设计
  • [解决] npm i:【idealTree:vue.web: sill idealTree buildDeps vue3拉取jQuery卡慢失败】
  • 在Ubuntu 18.04上安装Node.js的方法
  • 打开VSCod安装“PHP Intelephense”或“PHP Server”PHP扩展
  • 【C++二分查找】1482. 制作 m 束花所需的最少天数
  • RAG与LLM原理及实践(16)---RAG 前端技术Flask-socketIO
  • PySpark
  • 数据结构(7.1)——查找的基本概念
  • git svn 日记
  • Win10安装.net FrameWork3.5失败解决方法
  • 【北京迅为】《STM32MP157开发板使用手册》- 第十五章 制作最小linux系统
  • Android ADB抓取APP运行日志(adb logcat -v time)
  • MySQL表的操作与数据类型
  • MySQL——视图(三)应用实例——视图的应用
  • python进阶篇-day09-数据结构与算法(非线性结构与排序算法)
  • 【软件设计】常用设计模式--单例模式
  • 4G工业路由器:SR700的智能连接解决方案
  • 详细讲解hive on tez中各个参数作用,以及如何优化sql
  • iOS——通知协议代理
  • 两个实用小函数--多线程装饰器和自动记录退出程序