赛码-计算器的新功能-java

题目描述

当你学一些可视化程序设计语言时,老师经常会让你设计并且编程做出一个计算器,这时也许你会仿照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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值