练习内容 实验内容:
1.输入一个16位的长整型数,利用switch语句统计其中0-9每个数字出现的次数。
2.求a+aa+aaa+…+a…a(n个)的和,其中a为1-9之间的整数。例如,当a=3,n=4时,求3+33+333+3333的和。
3.给定一个正整数m,判断它的具体位数,分别打印每一位数,再按照逆序打印出各位数字。
4.编写程序将16进制数转换为10进制数。
5.编写程序对10个整数进行排序。
第一题 1.输入 输入长整形数,并将其转换为数组,以便我们更好的用for进行统计
1 2 3 System.out.print("输入一个16位的长整型数:" ); Scanner shiliu=new Scanner (System.in); long s=shiliu.nextLong();
2.创建记录数组 创建ling
数组用来记录对于的一个16位的长整型数对应的个数量,比如ling[0]代表数字0的数量、ling[1]代表数字1的数量、ling[2]代表数字2的数量……以此类推
3.for循环来switch16位的长整型数的各位数 for (int i = 0; i < arr.length; i++) {
switch(arr[i]) {
case '0':ling[0]++;break;
case '1':ling[1]++;break;
case '2':ling[2]++;break;
case '3':ling[3]++;break;
case '4':ling[4]++;break;
case '5':ling[5]++;break;
case '6':ling[6]++;break;
case '7':ling[7]++;break;
case '8':ling[8]++;break;
case '9':ling[9]++;break;
}
}
结果 完整代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 public static void diyiwen () { System.out.print("输入一个16位的长整型数:" ); int ling[]= {0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 }; Scanner shiliu=new Scanner (System.in); long s=shiliu.nextLong(); String sr=Long.toString(s); char [] arr = sr.toCharArray(); if (arr.length!=16 ) { System.out.println("输入错误,程序终止" ); System.exit(1 ); } for (int i = 0 ; i < arr.length; i++) { switch (arr[i]) { case '0' :ling[0 ]++;break ; case '1' :ling[1 ]++;break ; case '2' :ling[2 ]++;break ; case '3' :ling[3 ]++;break ; case '4' :ling[4 ]++;break ; case '5' :ling[5 ]++;break ; case '6' :ling[6 ]++;break ; case '7' :ling[7 ]++;break ; case '8' :ling[8 ]++;break ; case '9' :ling[9 ]++;break ; } } for (int i = 0 ; i < 10 ; i++) { System.out.println("其中" +i+"个数为:" +ling[i]); } }
第二题 求a+aa+aaa+…+a…a(n个)的和,其中a为1-9之间的整数。例如,当a=3,n=4时,求3+33+333+3333的和。
1.输入 首先要输入a与n的数值
2.处理 1 2 3 4 5 6 7 8 for (int i = 1 ; i <= n; i++) { jiashu=0 ; for (int j=1 ;j<=i;j++) { jiashu=jiashu+a*(int )Math.pow(10 , j-1 ); } sum=sum+jiashu; }
关键代码如上,先用for(int j=1;j<=i;j++)
求出i时(i<=n)i个a的数值,比如当a=3,n=4时,i=1则有jiashu=3,i=2时jiashu=3+30……
然后将这些加数求出来后再立马相加到sum中
结果 完整代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public static void dierwen () { int jiashu=0 ; int sum=0 ; Scanner out = new Scanner (System.in); System.out.print("请输入a的值:" ); int a= out.nextInt(); System.out.print("请输入n的值:" ); int n=out.nextInt(); for (int i = 1 ; i <= n; i++) { jiashu=0 ; for (int j=1 ;j<=i;j++) { jiashu=jiashu+a*(int )Math.pow(10 , j-1 ); } sum=sum+jiashu; } System.out.print("和为" +sum); }
第三题 1.输入 1 2 Scanner scanner=new Scanner (System.in); int m=scanner.nextInt();
输入int型后我们需要比较和逆序打印出来,所以要转为数组
1 2 String mString=Integer.toString(m); char [] arr=mString.toCharArray();
2.输出长度 使用数组特性输出长度
System.out.println("长度为"+arr.length);
3.输出第几位为什么数 使用for循环,配合数组将其“秒杀”
1 2 3 4 for (int i = 0 ; i < arr.length; i++) { int j=i+1 ; System.out.println("第" +j+"位数为" +arr[i]); }
4.逆序打印 逆序打印即配合数组和循环(循环数由高到低)将其打印出来即可
1 2 3 for (int i = arr.length; i >0 ; i--) { System.out.print("" +arr[i-1 ]+" " ); }
结果 完整代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public static void disanwen () { System.out.print("给定一个正整数m:" ); Scanner scanner=new Scanner (System.in); int m=scanner.nextInt(); String mString=Integer.toString(m); char [] arr=mString.toCharArray(); System.out.println("长度为" +arr.length); for (int i = 0 ; i < arr.length; i++) { int j=i+1 ; System.out.println("第" +j+"位数为" +arr[i]); } System.out.print("逆序打印为:" ); for (int i = arr.length; i >0 ; i--) { System.out.print("" +arr[i-1 ]+" " ); } }
第四题 1.输入 1 2 3 4 System.out.print("输入一个十六进制数:" ); Scanner scanner=new Scanner (System.in); String aString=scanner.nextLine(); char [] arr=aString.toCharArray();
老办法输入转数组
2.使用循环 使用for循环for (int i = 0; i < arr.length; i++)
对数组进行遍历
3.处理a-f 使用switch,例如若为a,则他的值为10*16^(所在位置-1)。其余字母同理,处理之后加在sum中就行。若不为字母则(对应数字)*16^(所在位置-1)
输出
完整代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 public static void disiwen () { long sum=0 ; System.out.print("输入一个十六进制数:" ); Scanner scanner=new Scanner (System.in); String aString=scanner.nextLine(); char [] arr=aString.toCharArray(); for (int i = 0 ; i < arr.length; i++) { switch (arr[i]) { case 'a' : case 'A' :sum=sum+10 *(long )Math.pow(16 , arr.length-i-1 );break ; case 'b' : case 'B' :sum=sum+11 *(long )Math.pow(16 , arr.length-i-1 );break ; case 'c' : case 'C' :sum=sum+12 *(long )Math.pow(16 , arr.length-i-1 );break ; case 'd' : case 'D' :sum=sum+13 *(long )Math.pow(16 , arr.length-i-1 );break ; case 'e' : case 'E' :sum=sum+14 *(long )Math.pow(16 , arr.length-i-1 );break ; case 'f' : case 'F' :sum=sum+15 *(long )Math.pow(16 , arr.length-i-1 );break ; default : String tmp=String.valueOf(arr[i]); int tmpe=Integer.parseInt(tmp); sum=sum+tmpe*(long )Math.pow(16 , arr.length-i-1 );break ; } } System.out.print("十进制为:" +sum); }