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

每日一题——第一百一十八题

题目:进制转换合集

#pragma once
#include<stdio.h>
#include<ctype.h>
#include<stdbool.h>
#include<string>

/// <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') { // 计算0-9的数字
			digit = c - '0';//将数字字符转为对应的十进制数字
		}
		else if (base == 16 && (c >= 'a' && c <= 'f')) {
			digit = c - 'a' + 10;//计算大于大于9小于f的字符对应的数字
		}
		else if (c < '0' || (c > '9' && base != 16) || (base == 16 && c > 'f')) {

			return 0;//出错
		}

		//检查是否在有效范围内
		if (digit >= base) {
			return 0;
		}

		//累加结果
		result += digit * multiplier;//从低位算,第一项均为1,第二项为base^1, 第三项为base^2 , ......
		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\n");
		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 ~ Z之间的字符
		}

		num /= r;//更新num的值
	}

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


	//打印

	for (int i = index - 1; index >= 0; index--) {
		printf("%c", result[i]);
	}
	printf("\n");
}

http://www.kler.cn/news/365237.html

相关文章:

  • vue3父组件控制子组件表单验证及获取子组件数值方法
  • 基于vue框架的的电子商务网站68pwt(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • Sei 生态迎首个 MMORPG 游戏伙伴 Final Glory,开启新篇章
  • 算法革新决定未来!深挖数字北极星3.0背后的技术逻辑
  • 在C及其他语言里运行shell命令的一点心得
  • Go语言中三个输入函数(scanf,scan,scanln)的区别
  • TCP控制位|标志位
  • 走廊泼水节——求维持最小生成树的完全图的最小边权和
  • HUAWEI_HCIA_实验指南_Lib3.2_配置Trunk接口
  • Spring Boot整合Stripe订阅支付指南
  • 线程池——Java
  • OCR提取影印版PDF文档的中日英三种文字
  • VUE中文本域默认展示最底部内容
  • C++20中头文件ranges的使用
  • 10.25学习
  • opencv 图像翻转- python 实现
  • 网站建设中需要注意哪些安全问题?----雷池社区版
  • 凯伦股份荣获中国钢结构协会2024年度技术创新奖
  • CentOS7上下载安装 Docker Compose
  • springboot社区网格管理系统-计算机毕业设计源码90901
  • MySQL同步到ES的方案选型
  • Uni-App-01
  • 教学资源的数字化:Spring Boot平台开发
  • 推荐一款USB总线调试工具:常用USB总线调试工具2024秋季版(1.1.10.41018 LTSC)
  • [含文档+PPT+源码等]精品基于springboot实现的原生微信小程序小区兼职系统
  • ES操作:linux命令