首页 > 代码库 > CodeM Qualifying Match Q5

CodeM Qualifying Match Q5

问题描述:

 

给定两个整数 l 和 r ,对于所有满足1 ≤ l ≤ x ≤ r ≤ 10^9 的 x ,把 x 的所有约数全部写下来。
对于每个写下来的数,只保留最高位的那个数码。求1~9每个数码出现的次数。

 

输入描述:
一行,两个整数 l 和 r (1 ≤ l ≤ r ≤ 10^9)。

 

输出描述:
输出9行。
第 i 行,输出数码 i 出现的次数。

 

输入例子:
1 4

 

输出例子:
4
2
1
1
0
0
0
0
0

 

 

 

运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。
case通过率为50.00%

 

String.substring(0,1) 直接提取字符串第一个字符版

 1 import java.util.Scanner;
 2 
 3 public class Main
 4 {
 5     public static void main(String arg[])
 6     {
 7         Scanner sc = new Scanner(System.in);
 8         int L = sc.nextInt();
 9         int R = sc.nextInt();
10         int x=L;
11         String str=null;
12         int high=0;
13         int num[] = new int[9];
14 
15         while (x<=R && x<=1000000000)
16         {
17             for(int div=1;div<=x;div++)
18             {
19                 if(x % div == 0)
20                 {
21                     str=String.valueOf(div);
22                     high=Integer.parseInt(str.substring(0,1));    //substring 截止从0到1位置
23                     num[high-1]++;
24                 }
25             }
26             x++;
27         }
28         for(int k=0;k<9;k++)
29         {
30             System.out.println(num[k]);
31         }
32     }
33 }

 

 

str.charAt(0) 直接提取字符串第一个字符版,得到char值

import java.util.Scanner;

public class Main_2
{
    public static void main(String arg[])
    {
        Scanner sc = new Scanner(System.in);
        int L = sc.nextInt();
        int R = sc.nextInt();
        int x=L;
        String str=null;
        int high=0;
        int num[] = new int[9];

        while (x<=R && x<=1000000000)
        {
            for(int div=1;div<=x;div++)
            {
                if(x % div == 0)
                {
                    str=String.valueOf(div);
                    high=Integer.parseInt(Character.toString(str.charAt(0))); 
            //charAT返回的是char,不是string,需要再转化为string num[high-1]++; } } x++; } for(int k=0;k<9;k++) { System.out.println(num[k]); } } }

 

 

Math.pow(10,^)直接求最高位再Math.floor()取整得到doubule值,(int)强制转换为int值

 1 import java.util.Scanner;
 2 
 3 public class Main_1
 4 {
 5     public static void main(String arg[])
 6     {
 7         Scanner sc = new Scanner(System.in);
 8         int L = sc.nextInt();
 9         int R = sc.nextInt();
10         int x=L;
11         int len=0;
12         int high=0;
13         int num[] = new int[9];
14 
15         while (x<=R && x<=1000000000)
16         {
17             for(int div=1;div<=x;div++)
18             {
19                 if(x % div == 0)
20                 {
21                     len=String.valueOf(div).length();
22                     high=(int)Math.floor(div / Math.pow(10,len-1));  
              //math.pow(基底,幂)次方,math.floor取整得到doubule值,(int)强制缩进为int值
23 num[high-1]++; 24 } 25 } 26 x++; 27 } 28 for(int k=0;k<9;k++) 29 { 30 System.out.println(num[k]); 31 } 32 } 33 }

 

CodeM Qualifying Match Q5