Read Phone Number

原创 2016年06月01日 20:40:07

Description
Do you know how to read the phone numbers in English? Now let me tell you.

For example, In China, the phone numbers are 11 digits, like: 15012233444. Someone divides the numbers into 3-4-4 format, i.e. 150 1223 3444. While someone divides the numbers into 3-3-5 format, i.e. 150 122 33444. Different formats lead to different ways to read these numbers:

150 1223 3444 reads one five zero one double two three three triple four.

150 122 33444 reads one five zero one double two double three triple four.

Here comes the problem:

Given a list of phone numbers and the dividing formats, output the right ways to read these numbers.

Rules:

Single numbers just read them separately.

2 successive numbers use double.

3 successive numbers use triple.

4 successive numbers use quadruple.

5 successive numbers use quintuple.

6 successive numbers use sextuple.

7 successive numbers use septuple.

8 successive numbers use octuple.

9 successive numbers use nonuple.

10 successive numbers use decuple.

More than 10 successive numbers read them all separately.

Input
The first line of the input gives the number of test cases, T(1 ≤ T ≤ 100).

T test cases follow. Each line contains a phone number N(1 ≤ length of N ≤ 100) and the dividing format F, one or more positive integers separated by dashes (-), without leading zeros and whose sum always equals the number of digits in the phone number.

Output
For each test case, output one line containing “Case #x: y”, where x is the case number (starting from 1) and y is the reading sentence in English whose words are separated by a space.
Sample Input
3
15012233444 3-4-4
15012233444 3-3-5
12223 2-3
Sample Output
Case #1: one five zero one double two three three triple four
Case #2: one five zero one double two double three triple four
Case #3: one two double two three

意思就是将号码分块读,12 223分开读就是一个1 和两个2 一个3
15555 3-2 就是分成155 55 读就是一个1 两个5和两个5

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int main()
{
    int n;
    cin>>n;
    char num[9][10]= {"double","triple","quadruple","quintuple","sextuple","septuple","octuple","nonuple","decuple"};
    char aa[10][6]= {"zero","one","two","three","four","five","six","seven","eight","nine"};
    for(int k=1; k<=n; k++)
    {
        char a[101];//号码数组
        scanf("%s",a);
        int b[200]= {0};//每个分区的长度
        char c[205];//3-4-4字符串的读入
        scanf("%s",c);
        int l=0;
        for(int i=0; i<strlen(c); i++)
        {
            if(c[i]>='0'&&c[i]<='9')
                b[l]=b[l]*10+c[i]-'0';
            else
                l++;
        }
        printf("Case #%d:",k);
        int s=0;
        for(int i=0; i<=l; i++)//操作输出
        {
            int sum=1;
            if(b[i]==1)//一个时特例,直接输出
                cout<<" "<<aa[a[s]-'0'];
            else
                for(int j=s; j<s+b[i]; j++)
                {
                    if(j!=s)
                    {
                        if(a[j]==a[j-1])
                        {
                            sum++;
                        }
                        else
                        {
                            if(sum>10)//超过十个也是一个个输出
                            {
                                for(int q=0;q<sum;q++)
                                    cout<<" "<<aa[a[j-1]-'0'];
                            }
                            else if(sum>=2)//两个到十个得用double等输出
                                cout<<" "<<num[sum-2]<<" "<<aa[a[j-1]-'0'];
                            else//一个的输出
                                cout<<" "<<aa[a[j-1]-'0'];
                            sum=1;
                        }
                        if(j==s+b[i]-1)//每个分区的最后一个的输出
                        {
                            if(sum>10)
                            {
                                for(int q=0;q<sum;q++)
                                    cout<<" "<<aa[a[j]-'0'];
                            }
                            else if(sum>=2)
                                cout<<" "<<num[sum-2]<<" "<<aa[a[j]-'0'];
                            else
                                cout<<" "<<aa[a[j]-'0'];
                            sum=1;
                        }
                    }
                }
            s+=b[i];
        }
        cout<<endl;
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

Google中国2014校园招聘笔试Round A China New Grad Test Problem A. Read Phone Number

Problem Do you know how to read the phone numbers in English? Now let me tell you. For example, In C...

Round A China New Grad Test 2014 Problem A. Read Phone Number

Problem Do you know how to read the phone numbers in English? Now let me tell you. For example, In ...

Read Phone Number

这是Google of Greater China Test for New Grads of 2014 Round A 第一题,题目: Read Phone Number Sample I...

Read Phone Number - Round A China New Grad Test 2014 - 循环控制

Read Phone Number 题意:主要考察对循环的控制。难度:2星。 题目不算复杂,解题思路比较清晰,但在关键的几行代码上,需要仔细对循环的临界值进行仔细斟酌。 刚开始写的时候,并没有考...

Sliding Phone Number

  • 2017年02月26日 22:47
  • 6.37MB
  • 下载

Windows Phone 8.1 驱动开发——注册表read/write

在做Windows Phone驱动开发时,时常需要和注册表打交道,因此,作为手机驱动开发人员,有必要了解一下注册表相关的知识。本人目前对注册表也不怎么了解,也只是大概的知道在Windows Phone...

phone_number

  • 2013年06月05日 14:13
  • 30.71MB
  • 下载

在Android6.0手机上,已声明却无法获取READ_PHONE_STATE权限

一、异常Log信息 二、在AndroidManifest.xml中已添加READ_PHONE_STATE权限,能在android6.0以下的系统正常运行 三、处理办法:调用动态获取权限...
  • ecjtuhq
  • ecjtuhq
  • 2016年08月01日 00:35
  • 4464

Read IMEI from Android phone

  • 2015年08月17日 09:53
  • 161KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Read Phone Number
举报原因:
原因补充:

(最多只允许输入30个字)