Здравствуйте!
Возникла проблема описанная в назывании. Была идея с переводом числа в другую систему счисления, но идея не работает, мне нужно следующее:
"2" * "3" = "6";
Причем это должно работать для всех чисел, в том числе и больших Int64 MaxValue в результате арифметической операции должна возвращаться строка
с результатом арифметической операции !! НО НЕ В ФОРМЕ ЭКСПОНЕНТЫ !! в примере экспонента только для наглядности:
"9,223,372,036,854,775,808" * "9,223,372,036,854,775,809" = "8.5070592e+37"
Пользоваться BigInteger и всеми методами System.Numerics - нельзя.
C#
C#: Умножения чисел(чисел в строках) больших Int64 MaxValue без использования System.Numerics и BigInteger
using System;
using System.Text;
class Program
{
static string AddStrings(string num1, string num2)
{
int carry = 0;
int i = num1.Length - 1;
int j = num2.Length - 1;
StringBuilder result = new StringBuilder();
while (i >= 0 || j >= 0 || carry > 0)
{
int digit1 = i >= 0 ? num1[i--] - '0' : 0;
int digit2 = j >= 0 ? num2[j--] - '0' : 0;
int sum = digit1 + digit2 + carry;
carry = sum / 10;
int remainder = sum % 10;
result.Insert(0, remainder);
}
return result.ToString();
}
static string MultiplyString(string num1, string num2)
{
if (num1 == "0" || num2 == "0")
return "0";
string result = "0";
int shift = 0;
for (int i = num1.Length - 1; i >= 0; i--)
{
int digit1 = num1[i] - '0';
int carry = 0;
StringBuilder partialResult = new StringBuilder();
for (int j = num2.Length - 1; j >= 0; j--)
{
int digit2 = num2[j] - '0';
int product = digit1 * digit2 + carry;
carry = product / 10;
int remainder = product % 10;
partialResult.Insert(0, remainder);
}
if (carry > 0)
partialResult.Insert(0, carry);
partialResult.Append('0', shift);
result = AddStrings(result, partialResult.ToString());
shift++;
}
return result;
}
static void Main(string[] args)
{
string num1 = "9223372036854775808";
string num2 = "9223372036854775809";
string product = MultiplyString(num1, num2);
Console.WriteLine(product);
}
}
Аслан Мырзабеков
Спасибо! Очень хорошая идея!! Казалось что умножение в столбик будет реализовать немного труднее..большое спасибо!
Похожие вопросы
- Программирование на C# - целые числа
- Программа для сложения, вычитания, умножения и деления чисел в двоичной, восьмеричной, шестнадцатеричной системах
- (c#) Нужна помощь в работе со строками. (лучше если будет не само решение, а объяснение, спасибо)
- C#. Как сгенерировать случайное число в диапозоне, исключающее одно число. C#
- Добавить символ в конце введённой строки, если количество символов нечётное, на C#
- System.InvalidCastException: "Unable to cast object of type 'System.String[]' to type 'System.IConvertible'."
- Решить текстовую задачу с использованием словаря на C#
- Как оптимизировать вычисление числа П? C#
- [c#] как найти все простые делители числа, ответ в массиве int
- Как сгенерировать случайные числа в C#?