質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

5回答

2602閲覧

Javaで四則演算 応用

yk-211

総合スコア34

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2015/05/20 00:56

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ページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

haru666

2015/05/20 01:19

問題文の意図しているところが正確にわかりませんでした。 0から40までは掛け算、というのは40の階乗を求めろということでしょうか? (すると0は含まない気がします、0から始めるとその答えは0ですよね…?)
yk-211

2015/05/20 01:27

申し訳ありません。 正確には1から40までは掛け算 40から50までは引き算 51から100までは足し算です。 はいそうでございます。 1からの階乗で打と思います。
guest

回答5

0

解決後に失礼します。

「0から100までの数字を利用し」という条件を
みなさん外してしまっているので、
0の扱いを、今一度確認したほうが良いかもしれませんね。

投稿2015/05/20 02:41

kaputaros

総合スコア1844

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2015/05/20 02:44

修正依頼のコメントで0は除外されていることを確認済みです. 質問者が質問を編集していないだけです.
kaputaros

2015/05/20 02:52

あ、ホントだ。 修正依頼の部分、閉じられて画面が表示されていたので、見落としていました。
guest

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

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yk-211

2015/05/20 02:30

回答ありがとうございます! かなりすっきりとまとまっており、分かりやすいです。 今後ともよろしくお願いいたします。
guest

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
haru666

総合スコア1591

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yk-211

2015/05/20 02:28

大変分かりやすく説明してくださり、ありがとうございました! 途中からlongを使ってやってみたりしましたが、出来なかったので・・・ こういったやり方があるとは考えてもみませんでした。 本当にありがとうございます。
guest

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
runun

総合スコア305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2015/05/20 01:52

このコードはまずいです. 最初に1から40まで掛けると確実に30桁以上の数になるので, ansがint型やlong型ではオーバーフローしてしまいます. double型にするしかないように思います. それからelse ifのi>40は不要だと思います.
haru666

2015/05/20 01:58

考えてみるとこの問題はオーバーフローしてしまいますね
yk-211

2015/05/20 02:31

回答ありがとうございます! とても参考になりました。 今後ともよろしくお願いいたします。
runun

2015/05/20 02:39

swordoneさん おっしゃる通りです。 実際に動かしてみたわけではなかったのですが、気が付きませんでした。。。 ご指摘ありがとうございます!
guest

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
nemuiten

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yk-211

2015/05/20 01:40

お答えいただきありがとうございます。 1番上の積の部分が0となりますが、 どうすれば答えが出ますでしょうか。
nemuiten

2015/05/20 01:45

0が答えです。初期値に0が代入されているためなにをかけても0になります。 iの初期値を0ではなく1にしてあげると1から40までの掛け算された数値が出てきますので正しく計算されているのがお分かりいただけるかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問