我正在为我的某个课程编写一个作业,其中我将任意大小的“数字”作为正确格式化的字符串。我使用三个堆栈,每个堆栈将每个数字作为单独的数值。堆栈1将采用第一个值,堆栈2采用第二个值,堆栈3将结果值推入并弹出到字符串中。最后,字符串打印到屏幕上。
我的问题是我“携带一个”的能力 假设我在我的程序中添加了7和15,我的程序会同时弹出堆栈中的7和5,分别添加一起得到12,这就是我的问题开始的地方,因为你们都看到一个仍然在堆栈和我需要一种方法来识别一个实际上是十位的数字,依此类推等等。
这是我的整个添加方法的一个帖子,它从我的main方法中获取命令行参数,但这并不是真正重要的我试图尽可能彻底。
我希望我是彻底的,你们都理解我的问题,我将很乐意详细说明这个问题。
private static void addlargeNumbers(String x, String y)throws ParseException{
String o = x.replaceAll(",", "");
String t = y.replaceAll(",", "");
String r = "";
Stack<Integer> one = new Stack<Integer>();
Stack<Integer> two = new Stack<Integer>();
Stack<Integer> resstack = new Stack<Integer>();
int i = 0, j = 0;
while(i < o.length()){
one.push(Character.getNumericValue(o.charAt(i)));
i++;
}
while(j < t.length()){
two.push(Character.getNumericValue(t.charAt(j)));
j++;
}
while(!one.isEmpty() || !two.isEmpty()){
if(!one.isEmpty() && !two.isEmpty()){
resstack.push(one.pop() + two.pop());
}
else if(one.isEmpty()){
resstack.push(two.pop());
}
else{
resstack.push(one.pop());
}
}
while(!resstack.isEmpty()){
r += resstack.pop();
}
if(!x.isEmpty() && !y.isEmpty()){
System.out.printf("%s + %s = %s\n", x, y, r );
}
else if(x.isEmpty()){
System.out.printf("%s = %s\n", y, r);
}
else{
System.out.printf("%s = %s\n", x, r);
}
}
我的问题已得到解答,我已经开始工作了,感谢您的帮助。
答案 0 :(得分:0)
您需要添加一个新变量来处理像
这样的进位int carry = 0;
然后,只需要在需要时计算并包含进位。
int carry=0, num1, num2, sum;
if(!one.isEmpty() && !two.isEmpty()){
num1 = one.pop();
num2 = two.pop();
// Add previous carry if any. Would be `0` for first run
sum = (num1 + num2 + carry)/10;
// calculate and store it for next iteration
carry = (num1 + num2 + carry)%10;
resstack.push(sum);
}
你还需要在与你添加的其他两个if
类似的行中包含逻辑,以便在堆栈不为空时注意。
答案 1 :(得分:0)
通过在前面的小长度字符串中加上0来使两个字符串的长度相等。然后将字符放入堆栈。之后你将获得作家结果
public void makeEqualSize(String str1,String str2){ int num=Math.abs(str1.length()-str2.length()); String str3=""; if(str1.length() < str2.length()){ for(int i=0;i < num;i++){ str3+="0"; } str1=str3+str1; }else{ for(int i=0;i <num;i++){ str3+="0"; } str2=str3+str2; } }