Ich hatte gerade in der Schule die Aufgabe, einen großen Zettel zu schreiben. Das heißt, eine Methode, die sehr große Zahlen zusammenzählen kann. Wir hatten 10 Minuten Zeit, und ich habe die Aufgabe pünktlich gelöst. Die Lehrerin hat sie genehmigt.
Mit dem Ergebnis bin ich allerdings nicht ganz zufrieden, und ich dachte, ich hätte vielleicht den falschen Ansatz gewählt.
Hier ist meine Version:
using System;
using System.Text;
namespace kæmpe_adder
{
static class Program
{
static void Main()
{
var x = "1111";
var y = "111111111";
Console.WriteLine(BigAdder(x, y));
Console.ReadLine();
}
public static StringBuilder BigAdder(string x, string y)
{
var a = new StringBuilder(x);
var b = new StringBuilder(y);
return BigAdder(a, b);
}
public static StringBuilder BigAdder(StringBuilder x, StringBuilder y)
{
int biggest;
int carry = 0;
int sum;
var stringSum = new StringBuilder();
if (x.Length > y.Length)
{
y.FillString(x.Length - y.Length);
biggest = x.Length;
}
else if (y.Length > x.Length)
{
x.FillString(y.Length - x.Length);
biggest = y.Length;
}
else
{
biggest = y.Length;
}
for (int i = biggest - 1; i >= 0; i--)
{
sum = Convert.ToInt32(x[i].ToString()) + Convert.ToInt32(y[i].ToString()) + carry;
carry = sum / 10;
stringSum.Insert(0, sum % 10);
}
if (carry != 0)
{
stringSum.Insert(0, carry);
}
return stringSum;
}
public static void FillString(this StringBuilder str, int max)
{
for (int i = 0; i < max; i++)
{
str.Insert(0, "0");
}
}
}
}
Als ich es schrieb, dachte ich daran, wie man es mit Binärdateien macht.
Gibt es einen kürzeren und/oder vielleicht einfacheren Weg, dies zu tun?