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

每日一题——第一百零九题

题目:进制转换合集。任意r进制与十进制之间的转换

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
long stringToDecimal(const char* str, int base);
void convertToBaseR(int num, int r);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));int num, r;printf("请输入十进制的整数: ");scanf_s("%d", &num);printf("请输入要转化的进制数: ");scanf_s("%d", &r);convertToBaseR(num, r);return 0;
}/// <summary>
/// 将字符串str转为十进制
/// </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 length = strlen(str);//从字符串末尾开始解析for (int  i = length - 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;//更新下一次计算的基数}}/// <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 = num / r; //更新下一次参与计算的数字}result[index] = '\0'; //在字符串末尾添加结束符//因为结果是从低位到高位存储的,所以需要反向打印for (int i = index; i >= 0; i--){printf("%c", result[i]);}printf("\n");
}
http://www.lryc.cn/news/447212.html

相关文章:

  • 街头摊贩检测系统源码分享
  • 服务器数据恢复—SAN环境下LUN映射出错导致文件系统一致性出错的数据恢复案例
  • 深度学习:自然语言处理的基本原理
  • Win10 Chrome浏览器被强制绑定主页的解决办法
  • 【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第四篇-着色器投影-接收阴影部分】
  • Shell脚本基础——实训项目任务
  • Eclipse Memory Analyzer (MAT)提示No java virtual machine was found ...解决办法
  • 【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
  • 植物大战僵尸杂交版V2.5.1下载(最新版)
  • 基于nodejs+vue的游戏陪玩系统
  • SVN文件不显示修改状态图标
  • GB28181语音对讲协议详解
  • JavaScript 数据可视化:前端开发的核心工具
  • [Redis][哨兵][上]详细讲解
  • 如何展开浏览器开发者模式的Fetch/XHR
  • Pydantic 是一个强大的 Python 库
  • 每日OJ题_牛客_NC40链表相加(二)_链表+高精度加法_C++_Java
  • Dubbo快速入门(一):分布式与微服务、Dubbo基本概念
  • jmeter性能测试---csv数据文件设置
  • 交换基础【计算机网络】
  • Android12的netd分析
  • OpenCV图像文件读写(6)将图像数据写入文件的函数imwrite()的使用
  • JVM(HotSpot):方法区(Method Area)
  • JWT的基础与使用
  • 处理 VA02修改行项目计划行(SCHEDULE LINES )报错:不可能确定一个消耗帐户
  • 【AI基础】pytorch lightning 基础学习
  • 高通量测序技术--组蛋白甲基化修饰、DNA亲和纯化测序,教授(优青)团队指导:从实验设计、结果分析到SCI论文辅助
  • [极客大挑战 2019]RCE ME1
  • 计算机毕业设计 中医院问诊系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • FME辅助规划选址