九度Online Judge | 题目1016:火星A+B
2013-07-09 17:41
302 查看
题目描述:
读入两个不超过25位的火星正整数A和B,计算A+B。需要注意的是:在火星上,整数不是单一进制的,第n位的进制就是第n个素数。例如:地球上的10进制数2,在火星上记为“1,0”,因为火星个位数是2进制的;地球上的10进制数38,在火星上记为“1,1,1,0”,因为火星个位数是2进制的,十位数是3进制的,百位数是5进制的,千位数是7进制的……
输入:
测试输入包含若干测试用例,每个测试用例占一行,包含两个火星正整数A和B,火星整数的相邻两位数用逗号分隔,A和B之间有一个空格间隔。当A或B为0时输入结束,相应的结果不要输出。
输出:
对每个测试用例输出1行,即火星表示法的A+B的值。
样例输入:
样例输出:
分析:
个人解答:
读入两个不超过25位的火星正整数A和B,计算A+B。需要注意的是:在火星上,整数不是单一进制的,第n位的进制就是第n个素数。例如:地球上的10进制数2,在火星上记为“1,0”,因为火星个位数是2进制的;地球上的10进制数38,在火星上记为“1,1,1,0”,因为火星个位数是2进制的,十位数是3进制的,百位数是5进制的,千位数是7进制的……
输入:
测试输入包含若干测试用例,每个测试用例占一行,包含两个火星正整数A和B,火星整数的相邻两位数用逗号分隔,A和B之间有一个空格间隔。当A或B为0时输入结束,相应的结果不要输出。
输出:
对每个测试用例输出1行,即火星表示法的A+B的值。
样例输入:
1,0 2,1 4,2,0 1,2,0 1 10,6,4,2,1 0 0
样例输出:
1,0,1 1,1,1,0 1,0,0,0,0,0
分析:
首先是质数的获取,对于这道题目,事先定义好是最便捷的方式。如果位数很大很大的话,也可以自己在程序中获取:1.遍历法(复杂度高);2.筛选法(依次踢出2、3、5...的倍数,推荐)。
然后就是普通的加法运算了,注意进位和输出的顺序即可。
个人解答:
import java.util.Scanner; public class MarsPlus { private static int[] prime = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97 }; private static void plus(String[] a, String[] b) { int m = a.length; int n = b.length; int r = m > n ? m : n; int[] c = new int[r]; boolean carry = false; for (int i = 0; i < r; ++i) { int tmp = carry ? 1 : 0; if (i < m) { tmp += Integer.parseInt(a[m - 1 - i]); } if (i < n) { tmp += Integer.parseInt(b[n - 1 - i]); } if (tmp >= prime[i]) { c[i] = tmp % prime[i]; carry = true; } else { c[i] = tmp; carry = false; } } if (carry) { System.out.print("1,"); } for (int i = r - 1; i > 0; --i) { System.out.print(c[i] + ","); } System.out.println(c[0]); } public static void main(String[] args) { Scanner reader = new Scanner(System.in); String line = reader.nextLine(); while (!line.startsWith("0")) { String[] numStr = line.split(" "); String[] a = numStr[0].split(","); String[] b = numStr[1].split(","); plus(a, b); line = reader.nextLine(); } reader.close(); } }
相关文章推荐
- 九度oj 题目1016:火星A+B 【ZJU2006考研机试题2】
- 九度OJ-题目1016 火星A+B
- 九度OnLine Judge 题目1422:Closest Number
- 九度 Online Judge 算法 刷题 题目1049:字符串去特定字符
- 九度 Online Judge 算法 刷题 题目1053:互换最大最小数
- 九度 Online Judge 算法 刷题 题目1065:输出梯形
- 九度 Online Judge 算法 刷题 题目1158:买房子
- 九度OJ 1016 火星A+B
- 题目1384:二维数组中的查找 --九度-online judge
- 九度Online Judge 题目1432:叠筐 解答
- 九度 Online Judge 算法 刷题 题目1050:完数
- 九度 Online Judge 算法 刷题 题目1054:字符串内排序
- 九度 Online Judge 算法 刷题 题目1066:字符串排序
- 九度 Online Judge 算法 刷题 题目1160:放苹果
- 九度OJ 1016:火星A+B 长整数加法
- 题目1016:火星A+B
- 九度 Online Judge 算法 刷题 题目1051:数字阶梯求和
- 九度 Online Judge 算法 刷题 题目1055:数组逆置
- 九度 Online Judge 算法 刷题 题目1067:n的阶乘
- 九度 Online Judge 算法 刷题 题目1166:迭代求立方根