AtCoderのABC
次のABCの問題へ
前のABCの問題へ
ABC105-C Base -2 Number
C#のソース
using System;
using System.Collections.Generic;
class Program
{
static string InputPattern = "InputX";
static List<string> GetInputList()
{
var WillReturn = new List<string>();
if (InputPattern == "Input1") {
WillReturn.Add("-9");
//1011
}
else if (InputPattern == "Input2") {
WillReturn.Add("123456789");
//11000101011001101110100010101
}
else if (InputPattern == "Input3") {
WillReturn.Add("0");
//0
}
else {
string wkStr;
while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr);
}
return WillReturn;
}
static void Main()
{
List<string> InputList = GetInputList();
long N = long.Parse(InputList[0]);
Console.WriteLine(Solve(N));
}
// -2進数にしたstring型を返す
static string Solve(long pN)
{
var ModList = new List<long>();
long CopiedVal = pN;
do {
if (CopiedVal % (-2) == 0) {
ModList.Add(0);
CopiedVal /= (-2);
}
else {
ModList.Add(1);
CopiedVal = (CopiedVal - 1) / (-2);
}
} while (Math.Abs(CopiedVal) > 0);
ModList.Reverse();
var sb = new System.Text.StringBuilder();
ModList.ForEach(X => sb.Append(X));
return sb.ToString();
}
}
解説
絶対値が0になるまで、マイナス2で割って
余りを逆順で記載すれば、
マイナス2進数での表現になります。
10進数を2進数に変換する方法と似た感じですね。