每日一题day02

8 篇文章 0 订阅

准备

博主:大大怪先森(记得关注,下次不要迷路哦)
编程环境: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;
}


结语

希望本篇文章能给各位带来帮助,如有不足还请指正!!!
码字不易,各位大大给个收藏点赞吧!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值