《牛客网》——华为机试在线训练(4-6)

4、字符串分割

题目描述

•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

输入描述:

连续输入字符串(输入2次,每个字符串长度小于100)

输出描述:

输出到长度为8的新字符串数组

示例1

输入

复制
abc
123456789

输出

复制
abc00000
12345678
90000000

代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
#define MAX_INPUT_SIZE 100

int main()
{
    int nInputLine = 0;
    int nStrLen = 8;
    char szInput[MAX_INPUT_SIZE] = {0};

    while(cin >> szInput && nInputLine < 2)
    {
        nInputLine++;
        int nLen = strlen(szInput);
        int nLine = nLen / 8;
        for(int j = 0; j < nLen / 8; j++)
        {
            for(int k = 0; k < 8; k++)
            {
                printf("%c", szInput[j * 8 + k]);
            }
            printf("
");
        }

        if(nLen % 8 > 0)
        {
            for(int k = 0; k < nLen % 8; k++)
            {
                printf("%c", szInput[nLine * 8 + k]);
            }
            for(int k = nLen % 8; k < 8; k++)
            {
                printf("0");
            }
            printf("
");
        }
    }

    return 0;
}

这道题我竟然一次就通过了。。

5、进制转换

题目描述

写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。(多组同时输入 )

输入描述:

输入一个十六进制的数值字符串。

输出描述:

输出该数值的十进制字符串。

示例1

输入

复制
0xA

输出

复制
10

代码:


#include <iostream>
#include <stdio.h>
#include <string.h>

#define MAX_SIZE 0x100

int main()
{
    char szInput[MAX_SIZE] = {0};
    //scanf("%s", szInput);
    
    while(scanf("%s", szInput) != EOF)
    {
        int nRes = 0;
        int nLen = strlen(szInput);
        for(int nIndex = 2; nIndex <= nLen; nIndex++)
        {
            if(('A' <= szInput[nIndex] && szInput[nIndex] <= 'F') || ('0' <= szInput[nIndex] && szInput[nIndex] <= '9'))
            {
                int nTmp = 0;
                switch(szInput[nIndex])
                {
                case 'A':
                case 'B':
                case 'C':
                case 'D':
                case 'E':
                case 'F':
                    nTmp = szInput[nIndex] - 'A' + 10;
                    break;
                default:
                    nTmp = szInput[nIndex] - '0';
                    break;
                }

                nRes = nRes * 16 + nTmp;
            }
        }

        printf("%d
", nRes);
        memset(szInput, 0, MAX_SIZE * sizeof(char));
    }
    
    //system("pause");
    return 0;
}

6、质数因子

题目描述

功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )

最后一个数后面也要有空格

详细描述:


函数接口说明:

public String getResult(long ulDataInput)

输入参数:

long ulDataInput:输入的正整数

返回值:

String



输入描述:

输入一个long型整数

输出描述:

按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。

示例1

输入

复制
180

输出

复制
2 2 3 3 5

代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#define MAX_SIZE 0x100

int IsPrimeNum(long lNum)
{
    if(1 == lNum || 2 == lNum)
    {
        return 1;
    }
    
    int nFlag = 1;
    //for(long i = 2; i <= lNum / 2; i++)
    for(long i = 2; i <= sqrt((double)lNum); i++)
    {
        if(lNum % i == 0)
        {
            nFlag = 0;
        }
    }

    return nFlag;
}

int GetPrimeNum(long lNum)
{
    if(IsPrimeNum(lNum))
    {
        printf("%ld ", lNum);
        return 1;
    }
    
    for(long i = 2; i < lNum / 2; i++)
    {
        
        if(IsPrimeNum(i) && lNum % i == 0)
        {
            printf("%ld ", i);
            GetPrimeNum(lNum / i);
            break;
        }
        //递归
    }
}

int main()
{
    long lInput = 0;
    scanf("%ld", &lInput);

    if(lInput <= 0)
    {
        return 0;
    }

    if(1 == lInput)
    {
        printf("1 ");
        return 0;
    }

    if(2 == lInput)
    {
        printf("2 ");
        return 0;
    }
    
    if(IsPrimeNum(lInput))
    {
        printf("%ld ", lInput);
        return 0;
    }
    //for(long i = 2; i < lInput / 2;)
    for(long i = 2; i < sqrt((double)lInput);)
    {
        if(IsPrimeNum(i) && lInput % i == 0)
        {
            printf("%ld ", i);
            lInput /= i;

            if(IsPrimeNum(lInput))
            {
                printf("%ld ", lInput);
                break;
            }

            continue;
        }
        i++;
    }
    //GetPrimeNum(lInput);
    
    system("pause");
    return 0;
}








原文地址:https://www.cnblogs.com/predator-wang/p/11849350.html