結果

問題 No.81 すべて足すだけの簡単なお仕事です。
ユーザー ゴリポン先生
提出日時 2025-05-15 17:28:37
言語 D
(dmd 2.109.1)
結果
AC  
実行時間 2 ms / 5,000 ms
コード長 1,163 bytes
コンパイル時間 2,692 ms
コンパイル使用メモリ 196,980 KB
実行使用メモリ 7,844 KB
最終ジャッジ日時 2025-05-15 17:28:44
合計ジャッジ時間 4,195 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 30
権限があれば一括ダウンロードができます

ソースコード

diff #

module main;
// https://yang33-kassa.jp/yukicoder/yukicoder081/ より
import std;

void main()
{
	// 入力
	int N = readln.chomp.to!int;
	// 答えの計算と出力
	auto vs = new string[](N);
	long pA = 0, pB = 0;
	long mA = 0, mB = 0;
	immutable base = 10L ^^ 10;
	foreach (i; 0 .. N) {
		vs[i] = readln.chomp;
		bool minus = false;
		if (vs[i][0] == '-') {
			minus = true;
			vs[i].popFront;
		}
		auto pos = vs[i].countUntil('.');
		if (pos == -1) {
			pos = vs[i].length;
			vs[i] ~= '.';
		}
		long a = 0;
		foreach (j; 0 .. pos) {
			a *= 10;
			a += vs[i][j] - '0';
		}
		long b = 0;
		vs[i] ~= "0".replicate(15);
		foreach (j; pos + 1 .. pos + 11) {
			b *= 10;
			b += vs[i][j] - '0';
		}
		if (!minus) {
			pA += a, pB += b;
			pA += pB / base;
			pB %= base;
		} else {
			mA += a, mB += b;
			mA += mB / base;
			mB %= base;
		}
	}
	// 正の数と負の数の差
	long nDiff = pA - mA;
	nDiff -= pB - mB < 0;

	if (nDiff >= 0) {
		pB -= mB;
		if (pB < 0) {
			pB += base;
			mA++;
		}
		pA -= mA;
		writefln("%d.%010d", pA, pB);
	} else {
		mB -= pB;
		if (mB < 0) {
			mB += base;
			pA++;
		}
		mA -= pA;
		writefln("-%d.%010d", mA, mB);
	}
}
0