来自Java Malik教科书 - 确定一个数字是否可被11整除。
提供代码解决方案:
import java.util.*;
public class Divby11
{
static Scanner console = new Scanner(System.in);
public static void main (String[] args)
{
int num, temp, sum;
char sign;
System.out.print("Enter a positive integer: ");
num = console.nextInt();
System.out.println();
temp = num;
sum = 0;
sign = '+';
do
{
switch (sign)
{
case '+' :
sum = sum + num % 10;
sign = '-';
break;
case '-' :
sum = sum - num % 10;
sign = '+';
}
num = num / 10; //remove the last digit
}
while (num > 0);
if (sum % 11 == 0)
System.out.println(temp + " is divisible by 11");
else
System.out.println(temp + " is not divisible by 11");
}
为什么要完成上述所有工作,只说...
if (sum % 11 == 0)
System.out.println(temp + " is divisible by 11");
else
System.out.println(temp + " is not divisible by 11");
你们中的任何一位专家都可以看到为什么作者会这样做(很长的路)?
答案 0 :(得分:7)
答案 1 :(得分:0)
此代码示例实际上并没有除以11。如果你看到,它在加上和减去每个数字之间交替,然后在最后检查结果是否可以被11整除。
例如,查看以下数字以及此算法如何使用它:
Start with sum=0, sign='+', num=517
First iteration: sum=7, sign='-', num=51
Second iteration: sum=6, sign='+', num=5
Final iteration: sum=11, sign='-', num=0
最终结果可以被11整除。
编辑:该算法确实看起来正在实施11的可分性规则,因为 dfa 在他的回答中提及。
答案 2 :(得分:0)
我怀疑是在模拟手动测试,奇数位数字和偶数位数位数相差11倍。实际上使用%11就可以了。
编辑:如果该示例真的试图避免执行%11,它应该再次发送总和直到它为0.
答案 3 :(得分:0)
您必须从书中提供更多关于作者试图展示的内容。此代码示例不检查输入的数字是否可被11整除。它的作用是它每隔一个数字相加,减去每隔一个数字,然后检查该数字以查看它是否可被10整除。
EX 输入的数字是4938 它需要8加上它总和 除以十分给出493 采用3从sum中减去它:sum = 5 除以十分给49分 取9并将其加到sum:sum = 14 除以10给4 需要4从sum中减去它:sum = 10
然后检查它是否可以被11整除。
好的,我知道为什么现在。除了计算数字之外,他/她还在教你一些东西
答案 4 :(得分:0)
这是一个展示如何实现特定检查的示例。使用您的示例不会演示相同的代码方法。