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

每日一题——第一百二十四题

题目:进制转换

#pragma once

#include<stdio.h>
#include<ctype.h>
#include<string.h>


/// <summary>
/// //将字符串表示的任意进制数转为十进制
/// </summary>
/// <param name="str">字符串</param>
/// <param name="base">当前进制数2、8、16</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 ch = tolower(str[i]);//将字符转换为小写
		int digit = -1;

		if (ch >= '0' && ch <= '9')
		{
			digit = ch - '0';//将字符转为对应的数字
		}
		else if (base == 16 && (ch >= 'a' && ch <= 'f'))
		{
			digit = ch - 'a' + 10;
		}
		else if(ch < '0' || (ch > '9' && base != 16) || (base == 16 && ch > 'f'))//错误的情况
		{
			return 0;
		}

		//检查进制数是否在有效范围内
		if (digit >= base)
		{
			return 0;//非法字符
		}

		//累加结果
		result += digit * multiplier;
		multiplier *= base;
	}

	return result;

}


/// <summary>
/// 将十进制数转为任意的r进制数
/// </summary>
/// <param name="num"></param>
/// <param name="r"></param>
void ConvertToBaseR(int num, int r)
{
	int index = 0;
	char result[65];//假设转换后的数不超过64位

	//处理num为0的情况
	if (num == 0)
	{
		printf("0");
		return;
	}

	while (num > 0)
	{
		int remainder = num % r;//获取最后一位数字
		if (remainder < 10)
		{
			result[index++] = '0' + remainder;//余数小于10的数字, 将其转换成0~9之间的字符
		}
		else
		{
			result[index++] = 'A' + (remainder + 10);//余数大于等于10的数字, 将其转换成A ~ F之间的字符
		}

		num /= r;//更新下一次计算的数字num
	}

	result[index] = '\0';//在字符串末尾添加字符串结束符

	//由于是从低位到高位存, 所以反向打印
	for (int i = index - 1; i >= 0; i--)
	{
		printf("%c", result[i]);
	}
	printf("\n");
}

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

相关文章:

  • 【西安电子科技大学考研】25官方复试专业课参考书目汇总
  • 打造高效租赁小程序让交易更便捷
  • 【从零开始入门unity游戏开发之——unity篇02】unity6基础入门——软件下载安装、Unity Hub配置、安装unity编辑器、许可证管理
  • Yolo11改进策略:Head改进|DynamicHead,利用注意力机制统一目标检测头部|即插即用
  • LabVIEW中什么和C 语言指针类似?
  • C++设计模式:享元模式 (附文字处理系统中的字符对象案例)
  • PPO(Proximal Policy Optimization)算法介绍
  • Ubuntu Docker 安装
  • template和span标签的使用
  • Kafka相关知识点(上)
  • 删除GitLab仓库中项目下面的多个文件夹
  • 【数据库系统概论】第3章 关系数据库标准语言SQL(二)数据查询(超详细)
  • 【Python】轻松解析JSON与XML:Python标准库的json与xml模块
  • K8S篇(基本介绍)
  • 【Linux】centos7安装配置DHCP、FTP服务
  • 机器学习:使用协同过滤推荐算进行电影推荐
  • 算法每日练 -- 双指针篇(持续更新中)
  • 如何在服务器端对PDF和图像进行OCR处理
  • C#/.NET/.NET Core学习路线集合,学习不迷路!
  • 二叉树相关|单值二叉树|相同的树|对称二叉树|前序遍历|中序遍历|后序遍历|另一棵树的子树|二叉树遍历(C)
  • 【后端】登录页面的 <验证码> 操作
  • Linux 进程间通信 共享内存_消息队列_信号量
  • 用Dify搭建AI知识库
  • ORACLE数据库查询当前安装的语言是哪一种?
  • Python反射API:面向对象编程的“魔法镜”
  • 大语言模型(LLM)量化基础知识(一)