0から100までの数字を利用し、
0から40までは掛け算
40から50までは引き算
50から100までは足し算とし合計を求めよ という問題です。
途中まで書いてみましたが、よく分からず3時間詰まっています。
どのように整理していけばよいか教えてくださいませ。
public static void main(String args[]){
int sum = 0;
int dec = 0;
for(int i = 1; i <= 40; i ++) {
sum += i;
System.out.println(sum); } for(int j = 41;j<=50; j ++){ dec -= j; System.out.println(dec); } }
}
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/05/20 01:27
回答5件
0
lang
1int number = 1; 2double ans = 1; 3for( ; number <= 40; number++) 4 ans *= number; 5for( ; number <= 50; number++) 6 ans -= number; 7for( ; number < 100; number++) 8 ans += number; 9System.out.println(ans);
ただなんとなく,下の意図のような感じがわずかにします.
lang
1public static void main(String args[]){ 2 int ans = 0; 3 for(int i = 0; i < args.length; i++){ 4 int num = Integer.parseInt(args[i]); 5 if(num < 1 || num > 100) continue; //扱いがわからないので無視 6 if(num <= 40) ans *= num; 7 else if(num <= 50) ans -= num; 8 else ans += num; 9 } 10 System.out.println(ans); 11}
投稿2015/05/20 02:20
総合スコア20651
0
ベストアンサー
まず、問題文から今回どのような結果を画面に表示するか考えてみましょう。
「合計を求めよ」 となっているので、今回は合計を1つ求めればいいでしょう。
lang
1int total = 1; // 掛け算から始まるため、0ではなく1を使います。
この合計を求める変数total
に、全ての計算を行います。
結果表示は1度だけなので、次にそれを書きましょう。
lang
1int total = 1; 2 3// ここで 1...100 の数値を計算させる 4 5System.out.println(total); // 求めた合計を画面に表示させる部分を書きましょう
今回問題で指示されていることは以下の3つです。
3つまとめて考えるのではなく、一つずつ解いていくことにしましょう。
- 1から40までは掛け算
- 40から50までは引き算
- 50から100までは足し算
lang
1int total = 1; 2 3// 1から40まで合計に掛け算する 4for (int number=1; number <=40; number++) { 5 // totalに対してnumberを掛け算 6 total *= number; 7} 8// 41から50まで合計に引き算する 9for (int number=41; number <=50; number++) { 10 // 同じようにtotalに対してnumberを引き算 11} 12// 51から100まで合計に足し算する 13for (int number=51; number <=100; number++) { 14 // 同じようにtotalに対してnumberを足し算 15} 16 17System.out.println(total);
おまけ
一つ問題があります。
total に 40の階乗がこのままだと入りません。
40の階乗という数値はとても大きいのです。
long や int ではオーバーフローを起こしてしまい正しく計算できません。
この点については、学校の先生に問題の解釈があっているか聞いて下さい。
ただ、それだとあまりにもあれなので…
この計算ができるクラスjava.math.BigInteger
を使った場合の答えを書いておきますね。
lang
1import java.math.*; 2 3BigInteger total = BigInteger.valueOf(1); 4 5// ループは一つにすることもできます。 6for (int number=1; number <=100; number++) { 7 if (number <= 40) { 8 // 40まではtotalに対してnumberを掛け算 9 total = total.multiply(BigInteger.valueOf(number)); 10 } 11 else if (number <= 50 { 12 // 次の50までは(=41から50までは)totalに対してnumberを掛け算 13 total = total.subtract(BigInteger.valueOf(number)); 14 } 15 else { 16 // その他(=51以上)から最後まではtotalに対してnumberを足し算 17 total = total.add(BigInteger.valueOf(number)); 18 } 19} 20 21System.out.println(total);
投稿2015/05/20 01:54
編集2015/05/20 02:10総合スコア1591
0
for文をいくつも書くよりも、1つにまとめた方がスッキリすると思います。
いくつかのロジックが考えられるので、いろいろ試してみてください。
自分は以下のようにしてみました。
lang
1 2public static void main(String args[]){ 3 int ans = 1; 4 for(int i = 1; i <= 100; i ++) { 5 if(i <= 40){ 6 ans *= i; 7 }else if(i > 40 && i <= 50){ 8 if(i == 41){ 9 System.out.println(ans); 10 ans = 0; 11 } 12 ans -= i; 13 }else{ 14 if(i == 51){ 15 System.out.println(ans); 16 ans = 0; 17 } 18 ans += i; 19 } 20 if(i == 100){ 21 System.out.println(ans); 22 } 23 24 } 25 } 26}
※追記
合計だけ出力すればよさそうだったので修正しました。
投稿2015/05/20 01:42
編集2015/05/20 01:47総合スコア305
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/05/20 01:52
2015/05/20 01:58
2015/05/20 02:31
2015/05/20 02:39
0
上記の問題ですが、こちらになると思います。
考え方は質問者様と同じで、上から順に指定された値に対してそれぞれ演算をさせています。
lang
1public static void main(String[] args) { 2 3 int ans = 1; 4 for (int i = 0; i <= 40; i++) ans *= i; 5 System.out.println(ans); 6 7 ans = 0; 8 for (int i = 40; i <= 50; i++) ans -= i; 9 System.out.println(ans); 10 11 ans = 0; 12 for (int i = 50; i <= 100; i++) ans += i; 13 System.out.println(ans); 14}
投稿2015/05/20 01:33
編集2015/05/25 02:32総合スコア14
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。