Hadh - 10 months ago 47

Java Question

I have to find the sum of all the multiples of 3 or 5 below N.

example if we have to list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9,the sum of these multiples is 23.

Now the only problem left is that I want it to be able to read ALL the numbers THEN display the sum, for now it reads one number and display the sum right after it, any ideas?

`import java.io.BufferedReader;`

import java.io.IOException;

import java.io.InputStreamReader;

public class Solution{

public static void main(String[] args) throws IOException {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String line = br.readLine();

int Nbr = Integer.parseInt(line);

for(int j=0; j<Nbr;j++)

{

BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));

String line2 = br2.readLine();

String[] numbers = new String[Nbr];

numbers[j]= line2;

System.out.println(Somme(Long.parseLong(numbers[j])));

}

}

public static long Somme(long Nn) {

long s = 0;

for (int i = 0; i < Nn; i++) {

if (((i % 3) == 0) || ((i % 5) == 0)) {

s = s + i;

}

}

return (s);

}

}

Answer Source

I suggest you use a `Scanner`

. I would also suggest you add to a `sum`

by iterating from `3`

to `n`

in increments of `3`

. Then from `5`

to `n`

in increments of `5`

(then exclude the multiples of `3`

, because they've already been added). Something like

```
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
int n = scanner.nextInt();
System.out.println(getSum(n));
}
}
public static long getSum(int n) {
long sum = 0;
for (int i = 3; i < n; i += 3) {
sum += i;
}
for (int i = 5; i < n; i += 5) {
if (i % 3 != 0) { // <-- already added if i is divisible by 3
sum += i;
}
}
return sum;
}
```

Based on your comment below, change `main`

to first read the `int`

of counts, then store them in an array. Something like

```
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
int toRead = scanner.nextInt();
int[] vals = new int[toRead];
for (int t = 0; t < toRead; t++) {
if (scanner.hasNextInt()) {
vals[t] = scanner.nextInt();
}
}
StringBuilder sb = new StringBuilder();
for (int n : vals) {
sb.append(getSum(n)).append(" ");
}
System.out.println(sb);
}
}
```