SRM 149 DIV2 250

問題を読む為の英単語

単語 意味
frequently しばしば、頻繁に
amount 総計

問題概要

入力:ドル、セント
出力:与えられるフォーマットで整形されたドル、セントの合計(string)

フォーマット用件
1. 先頭に"$"をつけること
2. 下桁より3桁おきに","をつけること
3. centはドルの少数点以下とし、例えば"2"が与えられた場合、".02"(ゼロサプレス無し)とする。

例示

入力:ドル: 49734321;
セント: 3;

出力:"$49,734,321.03"

回答(C#)

class FormatAmt
{
	public string amount (int dollars, int cents)
	{
		string amt = "";
		amt += "$";

		// Dollors
		string t_doll;
		int cnt = 1;
		t_doll = dollars.ToString ();
		for (int i = 0; i <= (t_doll.Length - 1); i++,cnt++) {
			amt += t_doll.Substring (i, 1);
			if (((t_doll.Length - cnt) % 3) == 0)
				if((t_doll.Length - cnt) != 0)
					amt += ",";
		}
		// Cent
		string t_cent;
		t_cent = cents.ToString ();
		amt += ".";
		if (t_cent.Length > 1) {
			amt += t_cent;
		} else {
			amt += "0";
			amt += t_cent;
		}
		return amt;
	}
}

他の人のコードチェック

とある人のコード(Java)

 return String.format("$%,d.%02d", dollars,cents);

っと一行だけ。。。 ぐぬぬ。そして以下で修正。

修正(C#)

return "$" + String.Format ("{0:#,0}", dollars) + "." +String.Format ("{0:D2}", cents);

すっきり

よく使いそうなコード

int doll = 3;
String.Format("{0}doll",doll)

フォーマットに整形したstringを返す。
{0}は引数を示し、第2引数を示している。
またフォーマットの指定は、
{x:D4}で、4桁表示、ゼロサプレス無し(x:引数ナンバー)
{x:#,0}で、各数値グループ毎(3桁おき)に","を挿入する。
「#」は桁プレースホルダ(対応する桁があれば表示、なければ非表示)
「,」は桁区切り記号(3桁おきに区切る)
「0」はゼロ・プレースホルダ(対応する桁があれば表示、無ければ0を表示)

参考文献

数値を右詰めや0埋めで文字列化するには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/116formatint/formatint.html

数値を3けた区切りの文字列に変換するには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/620number3groupsep/number3groupsep.html

C#】数値を指定の書式に変換する
http://www.openreference.org/articles/view/528