hello,大家好,这里是bang___bang_,本篇记录2道牛客习题,进制转换(简单),参数解析(中等),如有需要,希望能有所帮助!
目录
1️⃣进制转换
2️⃣参数解析
1️⃣进制转换
进制转换_牛客题霸_牛客网 (nowcoder.com)
描述
给定一个十进制数 M ,以及需要转换的进制数 N 。将十进制数 M 转化为 N 进制数。
当 N 大于 10 以后, 应在结果中使用大写字母表示大于 10 的一位,如 'A' 表示此位为 10 , 'B' 表示此位为 11 。
若 M 为负数,应在结果中保留负号。
数据范围:M<=10^8,2≤N≤16
要求:
示例1:
输入:7,2
返回值:“111”
示例2:
输入:10,16
返回值:”A“
解题思路:
1.M为0,直接返回"0"。
2.M为负数,我们只需要使用标记位记录,将M转换为正数进行进制转换,最后输出再添加上”-“。
3.求进制转换数,就是将数和进制不断相除,余数就是进制转换后的数,直到该数被除为0。
🌰8转化为二进制:
4.对于十六进制数0~9对应0~9;10~15对应A~F,只需要使用字符串"0123456789ABCDEF"
利用下标映射,我们可以发现下标刚好就是0~15,与字符串内容刚好形成十六进制转换。
总结:创建字符串"0123456789ABCDEF"利用下标映射到对应进制转换数,为负数最后添加"-"。
代码实现:
class Solution {
public:
string solve(int M, int N) {
if(M==0)
return "0";
bool flag=false;//负数标记位
string s,tables="0123456789ABCDEF";
if(M<0)
{
flag=true;
M=-M;//转化为正数
}
while(M!=0)
{
s+=tables[M%N];
M/=N;
}
if(flag)
{
s+="-";
}
reverse(s.begin(),s.end());
return s;
}
};
2️⃣参数解析
参数解析_牛客题霸_牛客网 (nowcoder.com)
描述
在命令行输入如下命令:
xcopy /s c:\\ d:\\e,
各个参数如下:
参数1:命令字xcopy
参数2:字符串/s
参数3:字符串c:\\
参数4: 字符串d:\\e
请编写一个参数解析程序,实现将命令行各个参数解析出来。
解析规则:
1.参数分隔符为空格
2.对于用""包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s "C:\\program files" "d:\"时,参数仍然是4个,第3个参数应该是字符串C:\\program files,而不是C:\\program,注意输出参数时,需要将""去掉,引号不存在嵌套情况。
3.参数不定长4.输入由用例保证,不会出现不符合要求的输入
数据范围:字符串长度: 1≤s≤1000
进阶:时间复杂度:O(n) ,空间复杂度:O(n)
输入描述:
输入一行字符串,可以有空格
输出描述:
输出参数个数,分解后的参数,每个参数都独占一行
示例:
输入:xcopy /s c:\\ d:\\e
输出:
4
xcopy
/s
c:\\
d:\\e
解题思路:
1.输入参数有空格,使用getline输入参数。
2.使用临时string变量存储解析的参数,解析出来的参数存入向量。
3.使用标记位判断当前是否处在参数内容包含的字符串中,处在记为true,默认为false。
4.参数由空格分开,遍历参数,遇到空格并且不在字符串内即成功分割参数,存入向量。
5.最后一个参数末尾没有空格,遍历完成后,再直接将最后一个参数(临时变量此时的值)存入向量。
代码实现:
#include <iostream>
#include<string>
#include<vector>
using namespace std;
void Getexplain(string cmd)
{
vector<string>res;
string s="";//空串
bool flag=false;//标记是否在字符串中,默认不在
for(int i=0;i<cmd.size();i++)
{
if(cmd[i]=='"')
{
flag=!flag;
}
else if(cmd[i]==' '&&!flag)
{
res.push_back(s);
s="";
}
else {
s+=cmd[i];
}
}
//存入最后一个参数(没有空格结尾)
res.push_back(s);
cout<<res.size()<<endl;
for(auto e:res)
{
cout<<e<<endl;
}
}
int main() {
string cmd;
getline(cin,cmd);
Getexplain(cmd);
return 0;
}
文末结语,本篇记录了2道牛客习题,1道简单题(进制转换);1道中等题(参数解析),本文旨在记录,如有需要,希望能有所帮助!!