トップページに戻る
次の競技プログラミングの問題へ
前の競技プログラミングの問題へ
No.49 算数の宿題
■■■問題■■■
太郎君は算数がとても苦手で、算数の宿題が出て困っています。
今日出た宿題は足し算と掛け算の問題で、明日までに解いていかなければならないので、
困っている太郎君の代わりに解いてあげてください。
太郎君の国では、足し算は'*'の記号で、また、掛け算は'+'の記号で表されます。
また、足し算と掛け算に優先度はなく、左から順番に計算します。
■■■入力■■■
S
1行目に、計算式を表す文字列Sが100文字以内で与えられます。
文字列はすべて '0'〜'9'、'*'、'+' のいずれかの文字で構成されます。
空白は含まず、2桁以上の数値が0で始まることはありません。
計算式が演算子から始まったり、演算子が2個連続するなどの不正な式が与えられることはありません。
■■■出力■■■
計算結果の値を出力してください。
計算結果の値が、10万を超えることはありません。
最後に改行してください。
C#のソース
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static string InputPattern = "Input1";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("2*3");
//5
//太郎君の国では、記号'*'は足し算を表します。
//2と3を足して5が解になります
}
else if (InputPattern == "Input2") {
WillReturn.Add("6*7+2");
//26
//我々の世界の表記に直すと 6+7×2ですが、
//優先度が無いため6と7を足してから2を掛けます
}
else if (InputPattern == "Input3") {
WillReturn.Add("2497*3+4");
//10000
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
string S = InputList[0];
int[] ValArr = S.Split('+', '*').Select(X => int.Parse(X)).ToArray();
int AppearOpeCnt = 0;
int Answer = ValArr[0];
foreach (char EachChar in S) {
if (EachChar == '+') Answer *= ValArr[++AppearOpeCnt];
if (EachChar == '*') Answer += ValArr[++AppearOpeCnt];
}
Console.WriteLine(Answer);
}
}
解説
結合法則をふまえて、順に計算してます。