准备
博主:大大怪先森(记得关注,下次不要迷路哦)
编程环境:vs2013
一、字符串中找出连续最长的数字串
1.题目描述
读入一个字符串str,输出字符串str中的连续最长的数字串
输入描述:
一个测试输入包含1个测试用例,一个字符串str,长度不超过255。
输出描述:
在一行内输出str中里连续最长的数字串。
示例:
输入:
abcd12345ed125ss123456789
输出:
123456789
oj链接:
https://www.nowcoder.com/questionTerminal/bd891093881d4ddf9e56e7cc8416562d
2.题目分析
创建三个字符串
(s)一个用来存放需要检查的字符串,
(cur)一个用来遍历字符串存放数字字符串
(ret)最后一个字符串用来存放最大的数字字符串。
每一次让cur的存放的数字字符串的大小和ret的数字字符串的大小就行比较,
如果cur.size() < ret.size()的话就清空数组,
如果cur.size() > ret.size() 就将cur的数字字符串拷贝到ret当中
这里需要注意的是最后一次循环的条件,如果s数字的字符串在最后的位置例如:
这里就需要注意循环的范围是<=s.size()最后一次比较字符‘\0’的位置,不然的最长字符串在最后位置,无法进入循环
3.代码实现(c++)
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s,cur,ret;
cin >> s;
for(int i = 0;i <= s.size();i++)
{
if(s[i] >= '0' && s[i] <= '9')
{
cur += s[i];
}
else
{
if(cur.size() > ret.size())
{
ret = cur;
}
else
{
cur.clear();
}
}
}
cout << ret <<endl;
return 0;
}
二、进制转换
1.题目描述
给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数
输入描述:
输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。
输出描述:
为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制**(比如,10用A表示,等等)**
示例:
输入:
7 2
输出:
111
oj链接:
https://www.nowcoder.com/questionTerminal/ac61207721a34b74b06597fe6eb67c52
2.题目分析
关键:开辟一个数组用来存放0~F的余数
M%N每次的结果在开辟的数组中寻址小标找到的就是二进制传化的数
M / N 依次循环直到M的值为0循环结束
这里还需要注意的问题就是当M为负数的时候需要先转化成正数再最后处理。
3.代码实现(C++)
代码如下(示例):
#include<iostream>
#include<string>
#include <algorithm>
#include<string.h>
using namespace std;
int main()
{
int M = 0;
int N = 0;
string table = "0123456789ABCDEF";
string s;
cin >> M >>N;
bool flag = false;
if(M < 0)
{
M = -M;
flag = true;
}
if (M == 0)
{
s = '0';
}
while(M)
{
s += table[M % N];
M /= N;
}
if(flag)
{
s += '-';
}
reverse(s.begin(),s.end());
cout << s << endl;
return 0;
}
结语
希望本篇文章能给各位带来帮助,如有不足还请指正!!!
码字不易,各位大大给个收藏点赞吧!!!