热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LeetCode整数与字符的转换问题

整数转罗马数字给定一个整数,将其转为罗马数字。输入确保在1到3999的范围内。示例:输入:3,输出:“III”。字符数值:I1ÿ

整数转罗马数字

给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。
示例 :输入: 3,输出: “III”。
字符 数值:I 1,V 5,X 10,L 50,C 100,D 500,M 1000

class Solution {
public:string intToRoman(int num) {int values[]&#61;{1000,900,500,400,100,90,50,40,10,9,5,4,1};string reps[]&#61;{"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};string res;for(int i&#61;0; i<13; i&#43;&#43;){while(num>&#61;values[i]){num -&#61; values[i];res &#43;&#61; reps[i];}}return res;}
};



罗马数字转整数

给定一个罗马数字&#xff0c;将其转换成整数。输入确保在 1 到 3999 的范围内。
示例 : 输入: “III”,输出: 3

class Solution {
public:int romanToInt(string s) {int values[] &#61; { 1000,900,500,400,100,90,50,40,10,9,5,4,1 };string reps[] &#61; { "M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I" };int res&#61;0;int index &#61; 0;int i &#61; 0;while( i <13&&index};



整数转换英文表示

将非负整数转换为其对应的英文表示。可以保证给定输入小于 2^31 - 1 。
示例&#xff1a;输入: 12345, 输出: “Twelve Thousand Three Hundred Forty Five”。

class Solution {
public:vector keys &#61; {1000000000,1000000,1000,100,90,80,70,60,50,40,30,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0};vector values &#61; {"Billion","Million","Thousand","Hundred","Ninety","Eighty","Seventy","Sixty","Fifty","Forty","Thirty","Twenty","Nineteen","Eighteen","Seventeen","Sixteen","Fifteen","Fourteen","Thirteen","Twelve","Eleven","Ten","Nine","Eight","Seven","Six","Five","Four","Three","Two","One","Zero"};string numberToWords(int num) {for (int i &#61; 0; i <32; &#43;&#43;i) {int key &#61; keys[i];if (num >&#61; key) {if (num >&#61; 100) {return numberToWords(num / key) &#43; " " &#43; values[i] &#43; (num % key > 0 ? " " &#43; numberToWords(num % key) : "");} else if (num >&#61; 20) {return values[i] &#43; (num % 10 > 0 ? " " &#43; numberToWords(num % 10) : "");} else {return values[i];}}}return "";}
};



字符串相乘

给定两个以字符串形式表示的非负整数 num1 和 num2&#xff0c;返回 num1 和 num2 的乘积&#xff0c;它们的乘积也表示为字符串形式。

示例 1: 输入: num1 &#61; “2”, num2 &#61; “3”. 输出: “6”

class Solution {
public:string multiply(string num1, string num2) {if (num1 &#61;&#61; "0" || num2 &#61;&#61; "0") return "0";int n1 &#61; num1.length() - 1;int n2 &#61; num2.length() - 1;vector<int> mul(n1 &#43; n2 &#43; 2);
//编译器默认初始化为0 n位数和m位数相乘最多为m&#43;n位数。
//乘数 num1 位数为 MM&#xff0c;被乘数 num2 位数为 NN&#xff0c; num1 x num2 结果 res 最大总位数为 M&#43;N
//num1[i] x num2[j] 的结果为 tmp(位数为两位&#xff0c;"0x","xy"的形式)&#xff0c;其第一位位于 res[i&#43;j]&#xff0c;第二位位于 res[i&#43;j&#43;1]。
//11*12 &#61;132 1和2相乘的结果为2的下标加1的下标&#xff0c;假设1的下标代表2乘了几个10&#xff08;0下标开始的话&#xff09;for (int i &#61; n1; i >&#61; 0; i--)for (int j &#61; n2; j >&#61; 0; j--) { //11 12int bitmul &#61; (num1[i] - &#39;0&#39;)*(num2[j] - &#39;0&#39;);//两个位上的数的乘积bitmul &#43;&#61; mul[i &#43; j &#43; 1];//先加低位&#xff0c;判断是否有新的进位mul[i &#43; j] &#43;&#61; bitmul / 10;//高位mul[i &#43; j &#43; 1] &#61; bitmul % 10;//低位}//去掉前导0int i &#61; 0;while (i < n1 &#43; n2 &#43; 1 && mul[i] &#61;&#61; 0)i&#43;&#43;;int index &#61; i;string multi&#61;string(n1&#43;n2&#43;2-i,&#39;0&#39;);for (; i < n1 &#43; n2 &#43; 2; i&#43;&#43;)multi[i-index]&#61;(mul[i]&#43;&#39;0&#39;);//string类型的append函数return multi;}
};



把字符串转换成整数

思路

1.功能测试

正数/复数/0

2.边界值测试

最大的正整数/最小的负整数&#xff08;数据上下溢出&#xff09;

class Solution {
public:/*全局变量*/enum {kValid,kInvalid}; // 枚举元素&#xff08;kValid&#61;0&#xff0c;kInvalid&#61;1&#xff09;int g_nStatus &#61; kValid; // 标记是否是非法输入/*功能函数*/int StrToInt(string str){g_nStatus &#61; kInvalid; // 初始标记为非法输入long long num &#61; 0; // 存储结果const char* cstr &#61; str.c_str();// 指向字符数组的指针// 判断是否是空指针和空字符串""if( (cstr !&#61; NULL) && (*cstr !&#61; &#39;\0&#39;) ){// 处理符号位int minus &#61; 1;if(*cstr &#61;&#61; &#39;-&#39;){minus &#61; -1;cstr&#43;&#43;;}else if(*cstr &#61;&#61; &#39;&#43;&#39;){minus &#61; 1;cstr&#43;&#43;;}// 处理其余位while(*cstr !&#61; &#39;\0&#39;){if(*cstr > &#39;0&#39; && *cstr < &#39;9&#39;){// string转int类型g_nStatus &#61; kValid; // 标记为合法输入num &#61; num*10 &#43; (*cstr -&#39;0&#39;); // string转换为int类型cstr&#43;&#43;;// 数据上下溢出if( ((minus>0) && (num > 0x7FFFFFFF)) ||((minus<0) && (num > 0x80000000)) ){g_nStatus &#61; kInvalid; // 如果溢出&#xff0c;则标记为非法输入num &#61; 0;break;}}else{g_nStatus &#61; kInvalid;num &#61; 0;break;}}if(g_nStatus &#61;&#61; kValid)num &#61; num * minus;}cout<<(int)num<<endl;return (int)num;}
};


推荐阅读
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
author-avatar
aarongwang56_972
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有