题目描述
当你学一些可视化程序设计语言时,老师经常会让你设计并且编程做出一个计算器,这时也许你会仿照windows系统自带的计算器外观和功能去设计,但是现在老师要你多做出一个有新功能的计算器,实现当输入一个数时,能够将这个数分解成一个或多个素因子乘积的形式,并按素因子的大小排列显示出来。大家对计算器中数的表示应该很清楚的。下面显示出了0 — 9这十个数字的表示形式。每个数字都占据5 * 3大小的字符区域
你能实现这个新功能吗?试试看吧!
主要思路:
我就是把0-9这十个数字的字符先全部写好,然后在一行行对的获取就行了。
先把数字因式分解的结果先拼成一个字符串。
见代码:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
/**
* 计算器的新功能
*/
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
int curr = scanner.nextInt();
List<Integer> factors = getFactors(curr);
StringBuilder sb = new StringBuilder();
for(Integer c: factors){
sb.append(c+"*");
}
sb.deleteCharAt(sb.length()-1);
//10=2*5
for(int row = 0; row < 5; row++){
//按行输出
for(char c: sb.toString().toCharArray()){
if(c=='*'){
if(row==2){
System.out.print('*');
}else{
System.out.print(' ');
}
}else{
System.out.print(new String(getCharArr(c)[row]));
}
}
System.out.println();
}
}
}
//一个正整数n(1 < n <= 1000000)
//计算质因数
private static List<Integer> getFactors(int num) {
List<Integer> res = new ArrayList<>();
for (int i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0) {
res.add(i);
num /= i;
i--;
}
}
res.add(num);
Collections.sort(res);
return res;
}
/**
* 根据相应的数字返回相应的字符数组
* @param num
* @return
*/
public static char[][] getCharArr(char num) {
if (num == '0') {
char[][] res = {
{' ', '-', ' '},
{'|', ' ', '|'},
{' ', ' ', ' '},
{'|', ' ', '|'},
{' ', '-', ' '}
};
return res;
}
if (num == '1') {
char[][] res = {
{' ', ' ', ' '},
{' ', ' ', '|'},
{' ', ' ', ' '},
{' ', ' ', '|'},
{' ', ' ', ' '}
};
return res;
}
if (num == '2') {
char[][] res = {
{' ', '-', ' '},
{' ', ' ', '|'},
{' ', '-', ' '},
{'|', ' ', ' '},
{' ', '-', ' '}
};
return res;
}
if (num == '3') {
char[][] res = {
{' ', '-', ' '},
{' ', ' ', '|'},
{' ', '-', ' '},
{' ', ' ', '|'},
{' ', '-', ' '}
};
return res;
}
if (num == '4') {
char[][] res = {
{' ', ' ', ' '},
{'|', ' ', '|'},
{' ', '-', ' '},
{' ', ' ', '|'},
{' ', ' ', ' '}
};
return res;
}
if (num == '5') {
char[][] res = {
{' ', '-', ' '},
{'|', ' ', ' '},
{' ', '-', ' '},
{' ', ' ', '|'},
{' ', '-', ' '}
};
return res;
}
if (num == '6') {
char[][] res = {
{' ', '-', ' '},
{'|', ' ', ' '},
{' ', '-', ' '},
{'|', ' ', '|'},
{' ', '-', ' '}
};
return res;
}
if (num == '7') {
char[][] res = {
{' ', '-', ' '},
{' ', ' ', '|'},
{' ', ' ', ' '},
{' ', ' ', '|'},
{' ', ' ', ' '}
};
return res;
}
if (num == '8') {
char[][] res = {
{' ', '-', ' '},
{'|', ' ', '|'},
{' ', '-', ' '},
{'|', ' ', '|'},
{' ', '-', ' '}
};
return res;
}
if (num == '9') {
char[][] res = {
{' ', '-', ' '},
{'|', ' ', '|'},
{' ', '-', ' '},
{' ', ' ', '|'},
{' ', '-', ' '}
};
return res;
}
return null;
}
}