高手帮我完善一下算法

无聊司马 2011-07-18 01:18:10
题目:实现两个字符串整数相加
输入1=-100
输入1长度4
输入2=20
输入2长度2
期望结果=-80
结果=-0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020
是否一致:false
================test6=====================
输入1=-14
输入1长度3
输入2=+356
输入2长度4
期望结果=342
结果=+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000342
是否一致:false
输入1=0
输入1长度1
输入2=0
输入2长度1
期望结果=0
结果=
是否一致:false
================test20=====================
输入1=-0
输入1长度2
输入2=0
输入2长度1
期望结果=0
结果=+0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
是否一致:false
================test21=====================
输入1=+0
输入1长度2
输入2=-0
输入2长度2
期望结果=0
结果=-0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
是否一致:false

这是结果测试中有些是FALSE的 就说明这个算法还没完善 请帮我改进一下 还需要改哪些地主 说明这个字符串数必须在(0,1024)之间 超过报错
下面是我的代码

public String getSum(String firstInt, String secondInt) throws Exception {
try {
return getSum(strToFsArray(firstInt), strToFsArray(secondInt));
} catch (Exception ex) {
throw new Exception("ERR:****");
}
}

private String[] strToFsArray(String param) throws Exception {
if (param == null || param.trim().equals("") || param.length() > 1024) {
throw new Exception();
}
int i = 1, j = 1;
String[] result = new String[1025];
String[] paramStr = param.split("");
boolean b = false;
if (paramStr.length > 2 && paramStr[1].equals("+")
|| paramStr[1].equals("-")) {
result[0] = paramStr[1];
j = 2;
} else {
result[0] = "+";
}
for (; i < result.length; i++) {
if (result.length - i == paramStr.length - j) {
b = true;
}
if (b) {
Integer.parseInt(paramStr[j]);
result[i] = paramStr[j];
j++;
} else {
result[i] = "0";
}
}

return result;
}

private String getSum(String[] fisrt, String[] second) throws Exception {
if (fisrt[0].equals(second[0])) {
return sum(fisrt, second);
} else {
String[] fis = fisrt, sec = second;
if (!comper(fisrt, second)) {
fis = second;
sec = fisrt;
}
return del(fis, sec);
}
}

private String sum(String[] fisrt, String[] second) throws Exception {
String result = "";
int num = 0;
int j = 1;
String head = fisrt[0];
String sum = null;
for (int i = 1024; i >= j; i--) {
sum = String.valueOf(Integer.parseInt(fisrt[i])
+ Integer.parseInt(second[i]) + num);
if (sum.length() == 2) {
result = sum.substring(1) + result;
num = Integer.parseInt(sum.substring(0, 1));
} else if (!"0".equals(sum)) {
result = sum + result;
num = 0;
}
}
if (num != 0) {
result = num + result;
}
if (head.equals("-")) {
result = head + result;
}
return result;
}

private String del(String[] fisrt, String[] second) throws Exception {
String result = "";
int num = 0;
int j = 1;
String head = fisrt[0];
int sum = 0;
for (int i = 1024; i >= j; i--) {
sum = Integer.parseInt(fisrt[i]) - Integer.parseInt(second[i])
- num;
if (sum >= 0) {
result = sum + result;
num = 0;
} else {
result = Math.abs(sum) + result;
num = 1;
}
}
if (result.length() > 1) {
result = head + result;
}
return result;
}

private boolean comper(String[] fisrt, String[] second) throws Exception {
int fir = 0, sec = 0;
for (int i = 1; i < 1025; i++) {
fir = Integer.parseInt(fisrt[i]);
sec = Integer.parseInt(second[i]);
if (fir > sec) {
return true;
} else if (fir < sec) {
return false;
}
}
return false;
}
...全文
222 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
qinqinqingguo 2011-07-22
  • 打赏
  • 举报
回复
长,顶
dong_very_good 2011-07-22
  • 打赏
  • 举报
回复
帮忙顶一下
24K純帥 2011-07-22
  • 打赏
  • 举报
回复
不懂,那长度是干嘛的,还有那么多0又是怎么来的
MicrosoftNMB 2011-07-19
  • 打赏
  • 举报
回复
SO LONG~
飞跃颠峰 2011-07-19
  • 打赏
  • 举报
回复
结果怎么那么多个0,你非要填满1024位?清掉前面多余的0行不?现在在帖子里连结果都看不到
lordboy 2011-07-18
  • 打赏
  • 举报
回复
太长了,帮顶
无聊司马 2011-07-18
  • 打赏
  • 举报
回复
有26种情况 你帮我把上面的算法完善一下哦 谢谢
飞跃颠峰 2011-07-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yangqunxi122 的回复:]

那算法不行 测出来没通过 上面是补充的 帮忙看下 上面的FALSE是测试没过的 帮忙完善一下算法
[/Quote]

你这里用的好像不是我写的那个啊,我写的自己测试通过了的
kinjames 2011-07-18
  • 打赏
  • 举报
回复
帮你顶下吧
老张-AI 2011-07-18
  • 打赏
  • 举报
回复
太长了。没时间看,帮你顶一下
无聊司马 2011-07-18
  • 打赏
  • 举报
回复
那算法不行 测出来没通过 上面是补充的 帮忙看下 上面的FALSE是测试没过的 帮忙完善一下算法
皮特张 2011-07-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 alexandertech 的回复:]

这个上次不是搞定了么
[/Quote]
飞跃颠峰 2011-07-18
  • 打赏
  • 举报
回复
这个上次不是搞定了么

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧