为什么我的程序打印出正确的剩余部分?

时间:2014-09-16 03:04:43

标签: java

我需要帮助这么糟糕。我已经做了两个小时的家庭作业,我无法理解我的逻辑。我们不允许使用%或/运算符,但我们必须通过减去除法来划分并找到余数 - 我的程序打印出除法部分而不是余数。有什么线索吗?我正在学习,我知道这是一个小错误,但我无法弄清楚。我已经检查了所有其他相似的问题,但他们没有任何帮助。谢谢大家。

到目前为止这是我的程序

import java.util.Scanner;

public class assignment4 {
public static void main(String args[]) {
    Scanner inputReader = new Scanner(System.in);

    int multiplicand, multiplier;
    double dividend, divisor, countDivisor, countDividend, remainder;
    int total=0, total2 = 0, countMult;

    System.out.print("Enter a multiplican: ");
    multiplicand = inputReader.nextInt();
    System.out.print("Enter a multiplier: ");
    multiplier = inputReader.nextInt();

    countMult = multiplier;
    while(multiplier > 0) {

        total = total + multiplicand;
        multiplier--;
    }

    System.out.println(multiplicand + " times " + countMult + " equals " + total );

    System.out.print("Enter a dividend: ");
    dividend = inputReader.nextInt();
    System.out.print("Enter a divisor: ");
    divisor = inputReader.nextInt();

    countDivisor = divisor;
    countDividend = dividend;
    while(dividend >= 0) {

        dividend = dividend - divisor;
        divisor--;
    }

    remainder =  divisor - 1;
    System.out.print(countDividend + " divided by " + countDivisor + " equeals " + divisor + " with a remainder of " + remainder);
}

}

3 个答案:

答案 0 :(得分:0)

您的while loop正在迭代,而被除数为> = 0

示例dividend = 10和divisor = 3

循环

10 - 3 = 7 //>> = 0 true
7 - 3 = 4 //> = 0真实 4 - 3 = 1 //> = 0为真,它应该在此停止,因为被分红是<除数
1 - 3 = -2 //>> = 0 false

这会做分裂

while(dividend >= divisor){
  dividend -= divisor;
  // count your result ++
}  
System.out.println(dividend);//this is the remainder

答案 1 :(得分:0)

你所拥有的一切都是很好的例外你的while循环和你的剩余计算:

这是一个有用的调整:

int result = 0;
while (dividend >= divisor)
{
   dividend = dividend - divisor;
   result = result + 1;
}
remainder = dividend;
System.out.print(countDividend + " divided by " + countDivisor + " equals " + integer_result + " with a remainder of " + remainder);

顺便说一句,你的程序不能很好地处理负数。在提交作业之前,您应该考虑修复该错误。

答案 2 :(得分:0)

你这样做完全错了,而你的教授会让你感觉不好。

要乘以你的班次并添加:

        1 0 1 0 -- bits A B C D  == 10  
      x 1 1 0 0 -- bits E F G H  == 12

D为零,因此第一个周期(将E F G H乘以零)导致

        0 0 0 0 

Shift E F G H留下一个

      1 1 0 0 0

位C为1,结果为

      1 1 0 0 0 

Shift E F G H留下一个

    1 1 0 0 0 0

B位为0所以没有变化

Shift E F G H留下一个

  1 1 0 0 0 0 0

位A为1所以添加

  1 1 0 0 0 0 0
   +  1 1 0 0 0
  -------------
  1 1 1 1 0 0 0

分裂是一回事,只是倒退。