**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。
上个月关门了。
改进这个问题
我正在为我的comp-sci课程做一个大整数计算器,但是我加在一起的一些东西不起作用。基本上,据我所知,它只适用于数字100及以下(可能也999及以下)。具体地说,我正在努力的是,当加上934+168,它总是得出10102,而不是1102。我以前做过这样的总结,但在试图解决其他问题的过程中,它已经不起作用了。如果有人能帮我修复代码,告诉我哪里出错了,请这么做。谢谢!
public static void main(String[] args) {
System.out.println("Please enter a positive integer.");
LinkedList a = takeData();
System.out.println("Please enter another positive integer.");
LinkedList b = takeData();
LinkedList<Integer> sum = add(a, b);
//System.out.println("They add to equal:\t");
print(sum);
}
public static LinkedList<Integer> add(LinkedList<Integer> a, LinkedList<Integer> b) {
LinkedList<Integer> sum = new LinkedList<Integer>();
int decide = 0, s = 0;
;
if (a.size() == b.size())
decide = 1;
fillWithZeros(a, b, sum);
print(a);
print(b);
if (decide == 1)
s = a.size() + 1;
else
s = a.size();
int add = 0, count = 0;
for (int x = 0; x < s; x++) {
count = 0;
add = 0;
if (x != s && decide == 0 || decide == 1 && x != s - 1)
add = a.pollLast() + b.pollLast();
if (sum.size() != 0)
add += sum.getFirst();
if (add >= 10) {
add -= 10;
//if(sum.size()>0)
//add+=sum.get(0);
sum.addFirst(0);
sum.addFirst(1);
count++;
//if(sum.size()>=2) THIS DOES NOTHING
//add+= sum.get(1);
}
System.out.println("\nThe " + x + " digit equals = " + add);
System.out.println("x = " + x + "\nsum.size = " + sum.size());
/* if(sum.size()>s-1 && decide==1)
{
System.out.println("YOu stopperd here");
return sum;
}*/
if (x != 0) {
if (sum.size() >= x) {
add += sum.get(1);
if (add >= 10) {
add -= 10;
sum.addFirst(0);
sum.addFirst(1);
if (sum.size() >= 2)
add += sum.get(1);
//add-=10;
//sum.addFirst(1);
sum.set(1, add);
} else {
sum.set(1, add);
}
System.out.println(add);
//sum.set(0,add);
//}
//sum.add(x-1,add);
//sum.add(add);
} else {
//add+= sum.get(x-1);
if (count == 0)
sum.set(0, add);
else
sum.set(1, add);
}
} else
sum.addLast(add);
print(sum);
if (sum.size() > s - 1 && decide == 1)
return sum;
}
return sum;
}
public static void print(LinkedList<Integer> a) {
System.out.println("\nSize of LinkList:\t" + a.size());
for (int x = 1; x <= a.size(); x++)
System.out.print(a.get(x - 1));
}
public static void fillWithZeros(LinkedList<Integer> a, LinkedList<Integer> b, LinkedList<Integer> c) {
while (b.size() != a.size()/*||c.size()!=b.size()*/) {
if (a.size() > b.size())
b.addFirst(0);
else if (a.size() < b.size())
a.addFirst(0);
/*else
c.addFirst(0);*/
}
/*c.addFirst(0);*/
}
public static LinkedList<Integer> takeData() {
boolean correctData = true;
Scanner read = new Scanner(System.in);
LinkedList list = new LinkedList();
do {
if (correctData == false)
System.out.println("Please re-enter a correct integer.");
String n = read.nextLine();
for (int x = 0; x < n.length(); x++) {
if (Character.isDigit(n.charAt(x))) {
int valueOf = n.charAt(x) - 48;
list.add(valueOf);
} else {
correctData = false;
break;
}
correctData = true;
}
} while (correctData == false);
return list;
}
1条答案
按热度按时间jgwigjjp1#
你应该像在纸上一样添加数字,也就是说,从最后的数字开始,添加数字,如果需要的话,再加上1。
使用
Iterator
,你可能已经知道你可以这样做:一
ListIterator
也可以这样做,但也可以向后迭代:这个
LinkedList
类对于反向构建结果也是非常好的,因为除了add()
,它也有addLast()
(做同样的事情),以及addFirst()
,我们可以使用它来构建从最后一个数字开始的结果。了解了所有这些,事情就变得很简单了,比如: