需要帮助通过省略其中一些来计算数字的总和
Need help to calculate the sum of numbers by omitting somes of them
#1。我需要编写一个 Java 程序来计算从 1 到 10,000(包括 1 和 10,000)的数字之和,但忽略可被三整除的数字和百位为 2 或 3 的数字(例如 8200 或 5312) ).
我开始但没用:
public class Sum10000 {
public static void main(String[] arg) {
long i = 0;
long sum = 0;
while (i != 10000) {
sum = sum + i;
i++;
if ((i % 3) == 0 || (i >= 200 && i <= 399) || (i >= 1200 && i <= 1399)
|| (i >= 2200 && i <= 2399) || (i >= 3200 && i <= 3399) || (i >= 4200 && i <= 4399)
|| (i >= 5200 && i <= 5399) || (i >= 6200 && i <= 6399) || (i >= 7200 && i <= 7399)
|| (i >= 8200 && i <= 8399) || (i >= 9200 && i <= 9399)) {
continue;
}
System.out.println( i);
System.out.println(sum);
}
}
}
您只应在测试条件后增加总和。
while (i != 10000) {
i++;
if ((i % 3) == 0 || (i >= 200 && i <= 399) || (i >= 1200 && i <= 1399) ||
(i >= 2200 && i <= 2399) || (i >= 3200 && i <= 3399) || (i >= 4200 && i <= 4399) ||
(i >= 5200 && i <= 5399) || (i >= 6200 && i <= 6399) || (i >= 7200 && i <= 7399) ||
(i >= 8200 && i <= 8399) || (i >= 9200 && i <= 9399)) {
continue;
}
sum += i;
System.out.println(i);
System.out.println(sum);
}
使用 Stream
可以简化这个:
System.out.println(IntStream.rangeClosed(1, 10000)
.filter(x -> x % 3 != 0 && x / 100 % 10 != 2 && x / 100 % 10 != 3).sum());
您没有跳过您想要跳过的号码。
首先你的循环需要 运行 包括你的最后一个数字所以你应该检查 i<=10000
其次,当您有想要跳过的号码时,您需要实际跳过它,您只是在跳过它的打印!而是尝试这样的事情:
public class Sum10000 {
public static void main(String[] arg) {
long i = 1;
long sum = 0;
while (i != 10000) {
while ((i % 3) == 0 || (i >= 200 && i <= 399) || (i >= 1200 && i <= 1399)
|| (i >= 2200 && i <= 2399) || (i >= 3200 && i <= 3399) || (i >= 4200 && i <= 4399)
|| (i >= 5200 && i <= 5399) || (i >= 6200 && i <= 6399) || (i >= 7200 && i <= 7399)
|| (i >= 8200 && i <= 8399) || (i >= 9200 && i <= 9399)) {
i++;
}
sum = sum + i;
System.out.println( i);
System.out.println(sum);
}
}
}
public class Sum10000 {
public static void main(String[] arg) {
long sum = 0;
for (int i = 1, 1!=10001, i++) {
if (!((i % 3) == 0 || (i >= 200 && i <= 399) || (i >= 1200 && i <= 1399)
|| (i >= 2200 && i <= 2399) || (i >= 3200 && i <= 3399) || (i >= 4200 && i <= 4399)
|| (i >= 5200 && i <= 5399) || (i >= 6200 && i <= 6399) || (i >= 7200 && i <= 7399)
|| (i >= 8200 && i <= 8399) || (i >= 9200 && i <= 9399))) {
sum = sum + i;
}
}
System.out.println(sum);
}
}
我对这个问题的理解是从总和中省略数字:这就是总和放在continue
指令之后的原因。
i % 1000
可用于获取i
的后三位:
for (int sum=0, i=1; i<= 10000; ++i) {
int test = i % 1000;
if ((test >= 200 && test < 400) || i % 3 == 0)
continue;
sum += i;
System.out.println("i = " + i);
System.out.println("sum = " + sum);
}
为什么不以编程方式测试您的条件?
int sum = 0;
for (int i = 1; i <= 10000; i++) {
if (i % 3 == 0) {
System.out.println("Exclude " + i + ": multiple of " + 3);
continue;
}
String decimal = "" + i;
if (decimal.length() > 2) {
char dig3 = decimal.charAt(decimal.length() - 3);
if (dig3 == '2' || dig3 == '3') {
System.out.println("Exclude " + i + ": 100s digit is " + dig3);
continue;
}
}
sum += i;
}
System.out.println(sum);
System.out.println("Or formatted: " + NumberFormat.getIntegerInstance().format(sum));
要使用正则表达式添加一个替代方案,IMO 比在 while 或 if 块中处理 3 个或更多条件更具可读性:
public static void main(String[] args) {
int sum = 0;
for(int i = 1; i <=10_000; i++){
String s = String.valueOf(i);
if( i%3 != 0 && !s.matches(".*[23]..") ){
sum += i;
}
}
System.out.println(sum);
}
#1。我需要编写一个 Java 程序来计算从 1 到 10,000(包括 1 和 10,000)的数字之和,但忽略可被三整除的数字和百位为 2 或 3 的数字(例如 8200 或 5312) ).
我开始但没用:
public class Sum10000 {
public static void main(String[] arg) {
long i = 0;
long sum = 0;
while (i != 10000) {
sum = sum + i;
i++;
if ((i % 3) == 0 || (i >= 200 && i <= 399) || (i >= 1200 && i <= 1399)
|| (i >= 2200 && i <= 2399) || (i >= 3200 && i <= 3399) || (i >= 4200 && i <= 4399)
|| (i >= 5200 && i <= 5399) || (i >= 6200 && i <= 6399) || (i >= 7200 && i <= 7399)
|| (i >= 8200 && i <= 8399) || (i >= 9200 && i <= 9399)) {
continue;
}
System.out.println( i);
System.out.println(sum);
}
}
}
您只应在测试条件后增加总和。
while (i != 10000) {
i++;
if ((i % 3) == 0 || (i >= 200 && i <= 399) || (i >= 1200 && i <= 1399) ||
(i >= 2200 && i <= 2399) || (i >= 3200 && i <= 3399) || (i >= 4200 && i <= 4399) ||
(i >= 5200 && i <= 5399) || (i >= 6200 && i <= 6399) || (i >= 7200 && i <= 7399) ||
(i >= 8200 && i <= 8399) || (i >= 9200 && i <= 9399)) {
continue;
}
sum += i;
System.out.println(i);
System.out.println(sum);
}
使用 Stream
可以简化这个:
System.out.println(IntStream.rangeClosed(1, 10000)
.filter(x -> x % 3 != 0 && x / 100 % 10 != 2 && x / 100 % 10 != 3).sum());
您没有跳过您想要跳过的号码。
首先你的循环需要 运行 包括你的最后一个数字所以你应该检查 i<=10000
其次,当您有想要跳过的号码时,您需要实际跳过它,您只是在跳过它的打印!而是尝试这样的事情:
public class Sum10000 {
public static void main(String[] arg) {
long i = 1;
long sum = 0;
while (i != 10000) {
while ((i % 3) == 0 || (i >= 200 && i <= 399) || (i >= 1200 && i <= 1399)
|| (i >= 2200 && i <= 2399) || (i >= 3200 && i <= 3399) || (i >= 4200 && i <= 4399)
|| (i >= 5200 && i <= 5399) || (i >= 6200 && i <= 6399) || (i >= 7200 && i <= 7399)
|| (i >= 8200 && i <= 8399) || (i >= 9200 && i <= 9399)) {
i++;
}
sum = sum + i;
System.out.println( i);
System.out.println(sum);
}
}
}
public class Sum10000 {
public static void main(String[] arg) {
long sum = 0;
for (int i = 1, 1!=10001, i++) {
if (!((i % 3) == 0 || (i >= 200 && i <= 399) || (i >= 1200 && i <= 1399)
|| (i >= 2200 && i <= 2399) || (i >= 3200 && i <= 3399) || (i >= 4200 && i <= 4399)
|| (i >= 5200 && i <= 5399) || (i >= 6200 && i <= 6399) || (i >= 7200 && i <= 7399)
|| (i >= 8200 && i <= 8399) || (i >= 9200 && i <= 9399))) {
sum = sum + i;
}
}
System.out.println(sum);
}
}
我对这个问题的理解是从总和中省略数字:这就是总和放在continue
指令之后的原因。
i % 1000
可用于获取i
的后三位:
for (int sum=0, i=1; i<= 10000; ++i) {
int test = i % 1000;
if ((test >= 200 && test < 400) || i % 3 == 0)
continue;
sum += i;
System.out.println("i = " + i);
System.out.println("sum = " + sum);
}
为什么不以编程方式测试您的条件?
int sum = 0;
for (int i = 1; i <= 10000; i++) {
if (i % 3 == 0) {
System.out.println("Exclude " + i + ": multiple of " + 3);
continue;
}
String decimal = "" + i;
if (decimal.length() > 2) {
char dig3 = decimal.charAt(decimal.length() - 3);
if (dig3 == '2' || dig3 == '3') {
System.out.println("Exclude " + i + ": 100s digit is " + dig3);
continue;
}
}
sum += i;
}
System.out.println(sum);
System.out.println("Or formatted: " + NumberFormat.getIntegerInstance().format(sum));
要使用正则表达式添加一个替代方案,IMO 比在 while 或 if 块中处理 3 个或更多条件更具可读性:
public static void main(String[] args) {
int sum = 0;
for(int i = 1; i <=10_000; i++){
String s = String.valueOf(i);
if( i%3 != 0 && !s.matches(".*[23]..") ){
sum += i;
}
}
System.out.println(sum);
}