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 }