さて、AtCoderで毎日やるのもいいんですが、こう、なにか蓄積されるような?感じがいいなということで、別のサイトも使いはじめました。
かの有名な会津オンラインジャッジ(AOJ)とProject Eulerです。
ただ、いまはProject Eulerはなんか問題があったとかで繋がらないようなので、こっちのサイトを見て解いています。
ペースとしては2つとも1日1問です。
なるべく途切れることのなく、毎日続けていけたら、と思っています。
ちなみにAOJではJava、Project EulerではSchemeで解いています。
さて、今日AOJの0004番を解きました。
方程式を解く、というやつです。
数学的に考えると、読み込んだ数たちの加減乗除だけで求まる問題ですが、僕が引っかかったところが
『各値は小数点以下第3位まで出力して下さい。小数点以下第4位を四捨五入して下さい。』
というとこです。
もともと、Javaは詳しくないので(;で終わる、とか、それくらいの知識)、色々調べていました。
まず、四捨五入に関してから。
もちろん、特殊なことをせずに四捨五入する方法もあります。
たとえば、今回みたいに小数点以下第4位を四捨五入するには、こうすればいいですね。
;double型の変数aの小数点以下第4位を四捨五入する double a = 0.43342; int b; int c; b = (int)(a*10000); // b = 4334 c = b % 10; // c = 4 ←小数点以下第4位 b -= c; //四捨五入する if(c >= 5){ b += 10; } a = ((double)b)/10000; //これでaが小数点第4位で四捨五入された
しかし、なんかこう、面倒くさい・・・
というわけで、こんな方法を見つけました。こちらのサイトを参考にしました。
import java.math.*; ;double型の変数aの小数点以下第4位を四捨五入する double a = 0.43342; BigDecimal x = new BigDecimal(a); x = x.setScale(3, BigDecimal.ROUND_HALF_UP); //これでxにaの小数点以下第4位を四捨五入した結果が入る
こっちの方が楽そうですね。
そして、出力の方。
小数点以下何桁までを出力するか、ですね。
それは次のようにやればOKです。
;double型の変数xを小数点以下3桁まで表示する。整数部分はあるだけ表示する。 System.out.printf("%.3f",x);
たいてい検索して探したやつでは、
;全部で5桁分の幅を使い、小数点以下は2桁まで表示する System.out.printf("%5.2f",x);
という説明ばかりだったのですが、ダメ元で
"%.3f"
としてみたら出来ました。
ラッキーラッキー。
もしくは、formatというのを使う方法もあるようですが(先ほどのサイトにありました)、違いがよくわかんないっす。へへ
という感じでした。
今回は以上です。