Сложение больших чисел через стринг - C#
Формулировка задачи:
Решил заморочиться и написать что-то вроде - сложения больших чисел через стринг.
Не знаю насколько вышло все просто, хотелось бы увидеть мнение, и узнать какие проблемы могут возникнуть с ним.
// Вариант проверки на не число - не писал, т.к. он в данном варианте мне не нужен =)
// Метод на умножение не чем особо не отличается, как я себе себе это представляю, т.к.
((целое.число%10)*(целое.число%10))/10+(целое.число%10)*(целое.число%10) всегда меньше 100
static void Main(string[] args)
{
Console.WriteLine(Plus(A, B));
}
// не заморачивался с переменными. т.к. это тест на консоли
// тут я вставил 2 набранных случайным образом числа // тестил и на других
public static string A = "438769840769847697498679480073609846097987195982598409285935772365945";
public static string B = "90283590327567236571996746675471409818097579469576761987498723476164868264";
public static string C { get; set; }
public static string D { get; set; }
public static int AA { get; set; }
public static int BB { get; set; }
// напишу немного коментов
public static string Plus (string a, string b)
{
int c = 0;
// сравниваю длинны
if (a.Length > b.Length)
{
c = b.Length;
D = a.Remove(a.Length - b.Length);
}
if (a.Length==b.Length)
{
c = a.Length;
D = "";
} else
if (a.Length<b.Length)
{
c = a.Length;
D = b.Remove(b.Length - a.Length);
}
// складываю
for (int i = 0; i < c; i++)
{
AA = (BB + (int)a[a.Length - 1 - i] + (int)b[b.Length - 1 - i] - 48 * 2) % 10;
C += AA.ToString();
BB = (BB + (int)a[a.Length - 1 - i] + (int)b[b.Length - 1 - i] - 48 * 2) / 10;
}
// добавляю остаток обрезания
if (D != "")
{
if (D.Length >= 1)
{
c = ((int)D[D.Length - 1] + BB - 48) % 10;
C += c.ToString();
c = ((int)D[D.Length - 1] + BB - 48) / 10;
}
if (D.Length >= 2)
{
c = c + (int)D[D.Length - 2] - 48;
C += c.ToString();
D = D.Remove(D.Length - 2);
if (D.Length > 1)
for (int i = 0; i < D.Length; i++)
C += D[D.Length - 1 - i];
else
C += D;
}
else
if (c != 0)
C += c.ToString();
}
else
if (BB != 0)
C += BB.ToString();
D = "";
// переворачиваем и возвращаем
for (int i = 0; i < C.Length; i++)
D += C[C.Length - 1 - i];
return D;
}Решение задачи: «Сложение больших чисел через стринг»
textual
Листинг программы
List<int> ArrayToListNote(int[] array)
{
var list = new List<int>(array.Length + 1);
int previousSum = 0;
for (var i = array.Length - 1; i >= 0; i--)
{
var sum = previousSum + array[i];
previousSum = sum/10;
list.Add(sum - previousSum * 10);
}
//переводим остаток в 10-чное цифирное число
while (previousSum > 0)
{
var nextSum = previousSum/10;
list.Add(previousSum - nextSum * 10);
previousSum = nextSum;
}
list.Reverse();
return list;
}