华为2019秋招笔试Java实现(5)

华为2019秋招笔试Java实现(5)

笔试日期2019年8月21日

第二题(200分)

题目描述

质数的定义为:在大于1的自然数中,除了1和它本身,不能整除其它自然数的数,如2,23等。

给定一个取值范围[low,high),找到该范围内的所有质数,输出这些质数的十位数之和与个位数之和的较小值,如果该质数小于10,则其十位数为0,注意low在取值范围内,high不在。

输入描述

第一行输入:low,high,用例保证均不小于0,且low

输出描述

输出找到的质数的十位数之和与个位数之和的较小值

示例

输入

151 160

输出

8

说明

151 ~ 160之间的质数有151,157。十位数之和5+5,个位数之和1+7,所以应该输出8。

分析

这题没什么难度,就是把区间内找质数、取十位数和取个位数这些小问题组合起来。

找质数就直接写个函数解决。

取个位是n%10,取十位是n/10%10。

解答

import java.util.Scanner;

public class Main2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int low = sc.nextInt(), high = sc.nextInt(), ten = 0, one = 0;
        sc.close();
        for (int i = low; i < high; i++) {
            if (isPrime(i)) {
                ten += i / 10 % 10;
                one += i % 10;
            }
        }
        System.out.println(ten < one ? ten : one);
    }

    public static boolean isPrime(int n) {
        if (n < 2) return false;
        for (int i = 2; i * i <= n; i++) {
            if (n % i == 0) return false;
        }
        return true;
    }
}

码字不易,转载请标明出处

你可能感兴趣的:(Java)