Sicily 1639. Run Length Encoding

Time Limit: 1 secs, Memory Limit: 32 MB

Description

Run-length encoding is a simple compression technique which compresses strings of letters by replacing repeated consecutive letters (called runs) by the number of occurrences of the letter, followed by that letter. For example, AAAABBBCDDE compresses to 4A3BC2DE. The number 1 may be omitted in runs consisting of a single letter, as with letters ‘C’ and ‘E’ in the previous example.

Any string consisting of uppercase letters where each letter is optionally preceded by a positive integer is called a properly encoded string.

Input

Input may contain many cases, each is a properly encoded string in one line.

Each string will contain between 0 and 50 characters (‘0’-‘9’, ‘A’-‘Z’), inclusive.

Each string will be a properly encoded string: all numbers contained will be positive integers with no leading zeros and each number will precede a letter.

Output

For each case, output the decoded string in one line. If the decoded string would be more than 50 characters long, return “TOO LONG” (without the quotes).

Sample Input

4A3BC2DE
1A1B1C1D1E
1A3A5A4BCCCC
50A
21Z13S9A8M

Sample Output

AAAABBBCDDE
ABCDE
AAAAAAAAABBBBCCCC
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
TOO LONG


<( ̄︶ ̄)> 别想得太复杂,每一步都想清楚,简单才是美。Just do it!

#include <iostream>
#include <string>

using namespace std;

int main()
{
    int num; string str, strp;
    while (getline(cin, str))
    {
        strp.clear();
        /// 循环更新
        for (int i = 0; i < str.size(); i++)
        {
            if (str[i] >= '0' && str[i] <= '9')
            {
                num = 0;    
                /// 注意num的范围,要是不加限制有可能会很大,甚至超过int的范围
                while (str[i] >= '0' && str[i] <= '9' && num <= 50) 
                {
                    num = 10 * num + str[i] - 48;
                    i++;
                }
                strp += string(num, str[i]);        
            }
            else
                strp += str[i];
        }
        /// 输出
        if (strp.size() <= 50)
            cout << strp << endl;
        else
            cout << "TOO LONG" << endl;
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值