Я не добавляю «настоящий» код сюда фрагменты кода, потому что я пробовал так много вариантов - с переменным успехом - что я просто собираюсь использовать C-подобный псевдокод.
===
Я хочу добавить два числа, которые превышают самое большое ANSI C
long long
(например, два 50-значных числа)
Идея состоит в том, что я бы использовал два char[]
массива и сделал бы классическое сложение стиля пера и бумаги, преобразовав каждый символ двух добавлений в целые, добавив и перенеся десятки, а затем назначив результаты как char
снова в массив char[]
.
Проблема, с которой я сталкиваюсь, заключается в преобразовании char
в int
(что всегда не получается) ... и последующем добавлении результата в другой текстовый массив. Попытка добавить символ к char result[]
с использованием result[i] = "5"
или даже его значения ascii result[i] = 53
всегда заканчивается неудачей.
псевдокод
int add(char *n1, char *n2){
// examples (Intentionally not the same length)
// n1 = "12345678901234567890"
// n2 = "987654321098765"
char result[100]; // array for resulting added ints as char
int r = 100; // The index (set to end) for the result array
result[r] = 0; // Assign the char-halt to END of the result
int carry = 0; // for carrying the 10s
maxlength = <length of largest addend> // (sizeof(n)/sizeof(n[0])) doesnt work because pointers
// start at end (right end) of arrays and move towards start (left end)
// each loop takes one character, starting at the far RIGHT (end) of the string array
// i = (maxlength - 1) to skip stop "0"
for (int i = (maxlength - 1); i >= 0; i--) {
a1 = int()n1[i] // doesnt return correct value in tests. Neither does a1 = n1[i]-0
a2 = int()n1[i] // doesnt return correct value in tests. Neither does a1 = n1[i]-0
int asum = a1 + a2 + carry
// carry all the tens
carry = 0; // reset carry
while (asum > 10){
carry += 10;
asum -= 10;
}
result[r] = char()asum
r -= 1 // Move result index one to the LEFT
}
}