AtCoderのPAST
次のPASTの問題へ
前のPASTの問題へ
第3回PAST C 等比数列
C#のソース
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static string InputPattern = "InputX";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("2 3 4");
//54
}
else if (InputPattern == "Input2") {
WillReturn.Add("4 3 21");
//large
}
else if (InputPattern == "Input3") {
WillReturn.Add("12 34 5");
//16036032
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
decimal[] wkArr = InputList[0].Split(' ').Select(pX => decimal.Parse(pX)).ToArray();
decimal A = wkArr[0];
decimal R = wkArr[1];
decimal N = wkArr[2];
if (R == 1M) {
if (A > 1000000000M) {
Console.WriteLine("large");
}
else {
Console.WriteLine(A);
}
return;
}
if (A > 1000000000M) {
Console.WriteLine("large");
return;
}
decimal CurrKou = A;
for (decimal I = 1; I <= N - 1; I++) {
CurrKou *= R;
if (CurrKou > 1000000000M) {
Console.WriteLine("large");
return;
}
}
Console.WriteLine(CurrKou);
}
}
解説
制約で公比が1以上とあるので
等比数列の公比が0や-1のケース
は、考えなくていいと分かります。
公比が1かどうかで場合分けし、
Decimal型を使って、オーバーフローを防いでます。