Problem Description
当你学一些可视化程序设计语言时,老师经常让你设计并编程做出一个计算机,这时也许你会仿照windows系统自带的计算器外观和功能区设计,但是现在考试要你多做出一个有新功能的计算器,实现当输入一个数是,能够将这个数分解成一个或多个素因子乘积的形式,并按素因子的大小排列显示出来。大家对计算器中数的表示应该是很清楚的,下面显示出了0-9这是个数组的表示形式,每个数字占据5*3大小的字符区域。
你能实现这个心能能吗?试试看吧!
输入
能输入多组测试数据,每组包括一个正整数n(n<=1000000)
输出
对于每个数,将它分解成若干个素数乘积的形式,应按从小到大的顺序输出,素因子之间用“*”的形式链接
样例输入
10 2
样例输出
- - | | - * - | | - - - | - | -
解析:
此题主要有两个难点,第一是将一个整数分解为素数的乘积,第二是将各个数显示出来,
代码
import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class WindowsNumber { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = new Scanner(System.in); while(scanner.hasNextInt()) { compute(scanner.nextInt()); } scanner.close(); } public static void compute(int number) { String[] number0 = new String[]{" - ", "| |", " ", "| |", " - "}; String[] number1 = new String[]{" ", " |", " ", " |", " "}; String[] number2 = new String[]{" - ", " |", " - ", "| ", " - "}; String[] number3 = new String[]{" - ", " |", " - ", " |", " - "}; String[] number4 = new String[]{" ", "| |", " - ", " |", " "}; String[] number5 = new String[]{" - ", "| ", " - ", " |", " - "}; String[] number6 = new String[]{" - ", "| ", " - ", "| |", " - "}; String[] number7 = new String[]{" - ", " |", " ", " |", " "}; String[] number8 = new String[]{" - ", "| |", " - ", "| |", " - "}; String[] number9 = new String[]{" - ", "| |", " - ", " |", " - "}; List<List<String[]>> resultNumbers = new ArrayList<List<String[]>>(); //保存被分解的数 int[] result = new int[10000]; int resultLength = 0; resultLength = decodeInt(number, result); for(int i=0; i<resultLength; i++) { List<String[]> resultNumber = new ArrayList<String[]>(); int temp = result[i]; while((temp%10 != 0) || (temp/10>0)) { int mod = temp % 10; temp = temp / 10; switch (mod) { case 0: resultNumber.add(0, number0); break; case 1: resultNumber.add(0, number1); break; case 2: resultNumber.add(0, number2); break; case 3: resultNumber.add(0, number3); break; case 4: resultNumber.add(0, number4); break; case 5: resultNumber.add(0, number5); break; case 6: resultNumber.add(0, number6); break; case 7: resultNumber.add(0, number7); break; case 8: resultNumber.add(0, number8); break; case 9: resultNumber.add(0, number9); break; } } resultNumbers.add(resultNumber); } //将最终结果输出 for(int i=0; i<5; i++) { for(int j=0; j<resultLength; j++) { List<String[]> resultNumber = resultNumbers.get(j); for(int k=0; k<resultNumber.size(); k++) { System.out.print(resultNumber.get(k)[i]); } if((i==2) && (j!=resultLength-1)) System.out.print(" * "); else System.out.print(" "); } System.out.println(); } } //此处代码借用别人的 public static int decodeInt(int n, int[] facArr) { int fac; int count; if (n < 4) { facArr[0] = n; return 1; } count = 0; // 下面的while循环为2试出n,直到2不是n的因子为止 while ((n & 1) == 0) // 这里判断偶数用 (n &1)==0,这比(n % 2)==0更快 { facArr[count++] = 2; n /= 2; } fac = 3; // 用3到sqrt(n)之间的奇数试除 while (fac * fac <= n) // fac*fac <= n { while (n % fac == 0) { facArr[count++] = fac; n /= fac; } fac += 2; } if (n == 1) return count; facArr[count++] = n; return count; } }
相关推荐
2015年360校招笔试题下载【技术类】
360 java 研发笔试题
2015年9月美国虹软公司校招内推笔试题,算法工程师岗位的,很有参考价值。公司为外资企业,很有前景的Arcsoft!欢迎大家参考。
资源是2015年360校园招聘笔试题,同学带回来拍成了照片,供大家下载,参考学习
2015阿里巴巴实习生招聘2015年4月2日在线笔试题,我投的研发Java岗,不过选择题没有单独考察Java的知识点,倒是有几题C++题目,看来选择题只是随机从题库生成,而且阿里的题库并没有多少考JAVA的选择题
2015年9月虹软校招内推笔试题-算法工程师岗位
算法笔试题算法笔试题算法笔试题算法笔试题算法笔试题算法笔试题算法笔试题算法笔试题算法笔试题算法笔试题算法笔试题算法笔试题算法笔试题算法笔试题算法笔试题
华为OD、大厂笔试算法题; 一共87题,每一题附答案(java语言),笔试时频繁出现的原题,想进大厂的小伙伴,欢迎下载; eg: 1、5键键盘的输出 有一个特殊的5键键盘,上面有a,ctrl-c,ctrl-x,ctrl-v,ctrl-a五个键...
部分IT公司笔试算法题,比较有用,让大家学习,很多有名算法!
大疆求职算法笔试题 大疆求职算法笔试题大疆求职算法笔试题大疆求职算法笔试题大疆求职算法笔试题大疆求职算法笔试题大疆求职算法笔试题
2015年腾讯Java工程师笔试题.zip 2015年腾讯Java工程师笔试题.zip 2015年腾讯Java工程师笔试题.zip 2015年腾讯Java工程师笔试题.zip
奇虎360,2015校招真题,技术类笔试题,真题试卷照片
2015年最新的Java工程师笔试题 本资料共包含以下附件: 2015年最新的Java工程师笔试题.doc
第一部分 奇虎360 2015年校园招聘笔试题
全排序、二分查找、冒泡排序、阶乘、最大公约数、最小公倍数、...这是里面包含的算法,本人在准备笔试的时候找的,算法尽量采用最优的。 所有的代码均经过测试,个人觉得没有问题,如果哪位大牛找到错误,欢迎批评指正
2015年校园招聘,奇虎360公司的笔试题,上面的选项未必是正确答案,自己做吧
C++面试题笔试题C++ 数据结构算法笔试题资料合集: 50个C、C++面试题.pdf C++ 数据结构、算法笔试题.docx C++基础面试题.docx C++开发工程师面试题库.docx C++技能测试试卷一及答案.docx C++技能测试试卷二及答案....
多种笔试面试的算法设计题,和经典笔试题目。