英文:
check sum calculator doesn't get the last digit
问题
以下是翻译好的代码部分:
public static void checksum(long l) {
long x1 = l / 100000000000l % 10;
long x2 = l / 10000000000l % 10;
long x3 = l / 1000000000 % 10;
long x4 = l / 100000000 % 10;
long x5 = l / 10000000 % 10;
long x6 = l / 1000000 % 10;
long x7 = l / 100000 % 10;
long x8 = l / 10000 % 10;
long x9 = l / 1000 % 10;
long x10 = l / 100 % 10;
long x11 = l / 10 % 10;
long x12 = l / 1 % 10;
long x13 = l % 10;
long calculation = x1+(x2*3)+x3+(x4*3)+x5+(x6*3)+x7+(x8*3)+x9+(x10*3)+x11+(x12*3)+x13;
System.out.println(calculation);
}
英文:
So when I put in a 12-digit long number it calculates the check sum correctly. But if I put in a 13-digit long number it does something wrong.
public static void checksum(long l) {
long x1 = l / 100000000000l % 10;
long x2 = l / 10000000000l % 10;
long x3 = l / 1000000000 % 10;
long x4 = l / 100000000 % 10;
long x5 = l / 10000000 % 10;
long x6 = l / 1000000 % 10;
long x7 = l / 100000 % 10;
long x8 = l / 10000 % 10;
long x9 = l / 1000 % 10;
long x10 = l / 100 % 10;
long x11 = l / 10 % 10;
long x12 = l / 1 % 10;
long x13 = l % 10;
long calculation = x1+(x2*3)+x3+(x4*3)+x5+(x6*3)+x7+(x8*3)+x9+(x10*3)+x11+(x12*3)+x13;
System.out.println(calculation);
}
答案1
得分: 1
这是你需要使用的内容。在你最初的模块计算中,存在一个10倍的误差。
checksum(3729483022008L);
public static void checksum(long l) {
long x1 = l / 100000000000L % 10;
long x2 = l / 10000000000L % 10;
long x3 = l / 1000000000 % 10;
long x4 = l / 100000000 % 10;
long x5 = l / 10000000 % 10;
long x6 = l / 1000000 % 10;
long x7 = l / 100000 % 10;
long x8 = l / 10000 % 10;
long x9 = l / 1000 % 10;
long x10 = l / 100 % 10;
long x11 = l / 10 % 10;
long x12 = l / 1 % 10;
long calculation = x1 + (x2 * 3) + x3 + (x4 * 3) + x5
+ (x6 * 3) + x7 + (x8 * 3) + x9 + (x10 * 3) + x11
+ (x12 * 3);
System.out.println(calculation);
}
输出结果为
100
英文:
Here is what you need to use. You were off by a factor of 10 in your initial modular computations.
checksum(3729483022008L);
public static void checksum(long l) {
long x1 = l / 1000000000000L % 10;
long x2 = l / 100000000000L % 10;
long x3 = l / 10000000000L % 10;
long x4 = l / 1000000000 % 10;
long x5 = l / 100000000 % 10;
long x6 = l / 10000000 % 10;
long x7 = l / 1000000 % 10;
long x8 = l / 100000 % 10;
long x9 = l / 10000 % 10;
long x10 = l / 1000 % 10;
long x11 = l / 100 % 10;
long x12 = l / 10 % 10;
long x13 = l / 1 % 10;
long calculation = x1 + (x2 * 3) + x3 + (x4 * 3) + x5
+ (x6 * 3) + x7 + (x8 * 3) + x9 + (x10 * 3) + x11
+ (x12 * 3) + x13;
System.out.println(calculation);
}
Prints
100
</details>
# 答案2
**得分**: 0
以下是翻译后的内容:
那是正常的,因为要获取第一个数字,使用 `x1` 除以 `10^11`,然后应用 `%10`,使用大于 10^13(因此长度为 13 或更多位)的数字不会使用新的数字。
```java
System.out.println(l / 100000000000L); // 37
System.out.println(l / 100000000000L % 10); // 7
操作 number / ((long) Math.pow(10, i)) % 10
获取了 number
的第 i
位数字,因此最大为 12,不会得到第 13 位或更大的数字。
事实上,这个问题还与你两次使用最后一个 8
有关,你需要将所有因子左移,将它们乘以 10。
public static void checkSum(long l) {
long x1 = l / 1000000000000L % 10;
long x2 = l / 100000000000L % 10;
long x3 = l / 10000000000L % 10;
long x4 = l / 1000000000 % 10;
long x5 = l / 100000000 % 10;
long x6 = l / 10000000 % 10;
long x7 = l / 1000000 % 10;
long x8 = l / 100000 % 10;
long x9 = l / 10000 % 10;
long x10 = l / 1000 % 10;
long x11 = l / 100 % 10;
long x12 = l / 10 % 10;
long x13 = l % 10;
long calculation = x1 + (x2 * 3) + x3 + (x4 * 3) + x5 + (x6 * 3) + x7 + (x8 * 3) + x9 +
(x10 * 3) + x11 + (x12 * 3) + x13;
System.out.println(calculation);
}
英文:
That is normal because the to get the first digit, with x1
you divide by 10^11
, but then you apply %10
, with a number bigger that 10^13 (so 13-len or more) it do not uses the new digits
System.out.println(l / 100000000000L); // 37
System.out.println(l / 100000000000L % 10); // 7
The operation number / ((long) Math.pow(10, i)) % 10
takes the i-th
digit of number
, so with 12 as the biggest one, you won't get the 13th or bigger
In fact this problem goes along the other that you used the last 8
twice, you need to shift all factors, multiply them by 10
public static void checkSum(long l) {
long x1 = l / 1000000000000L % 10;
long x2 = l / 100000000000L % 10;
long x3 = l / 10000000000L % 10;
long x4 = l / 1000000000 % 10;
long x5 = l / 100000000 % 10;
long x6 = l / 10000000 % 10;
long x7 = l / 1000000 % 10;
long x8 = l / 100000 % 10;
long x9 = l / 10000 % 10;
long x10 = l / 1000 % 10;
long x11 = l / 100 % 10;
long x12 = l / 10 % 10;
long x13 = l % 10;
long calculation = x1 + (x2 * 3) + x3 + (x4 * 3) + x5 + (x6 * 3) + x7 + (x8 * 3) + x9 +
(x10 * 3) + x11 + (x12 * 3) + x13;
System.out.println(calculation);
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论