Vou dar um exemplo do que você pode fazer.
Digamos que você tenha os seguintes números:
31415926535897932384626433832795
e
27182818284590452353602874713527
Você sabe que ao somar esses dois números, o resultado deve ser
58598744820488384738229308546322
Vamos ver como se chega a esse resultado.
A primeira coisa é você criar um método que receba uma string, e converta para um array de ints, cada int contendo 9 algarismos.
Você põe os algarismos de trás para frente, de 9 em 9 posições.
Vou mostrar o que eu quero que você faça.
O comprimento da string 31415926535897932384626433832795 é 32. Isso quer dizer que eu tenho de quebrar em (32 + 9 - 1) / 9 = 4 pedaços. Então você cria um array de 4 ints, com o seguinte conteúdo:
a [0] = 433832795
a [1] = 932384626
a [2] = 926535897
a [3] = 31415
Mostro abaixo com os números de 1 a 9, para ficar mais fácil você entender de onde eu peguei os dígitos.
31415 926535897 932384626 433832795
56789 123456789 123456789 123456789
A mesma coisa você faz com 27182818284590452353602874713527, que vai dar:
b [0] = 874713527
b [1] = 452353602
b [2] = 818284590
b [3] = 27182
27182 818284590 452353602 874713527
56789 123456789 123456789 123456789
Agora é que vou realmente fazer a soma. Crie um array de ints cujo tamanho é igual ao maior tamanho entre os arrays a e b, mais um:
- ou seja, crie um array c com 5 posições.
Some as posições correspondentes. Se um dos arrays for mais curto que o outro, considere que o valor é zero.
c[0] = a[0] + b[0] = 1308546322
c[1] = a[1] + b[1] = 1384738228
c[2] = a[2] + b[2] = 1744820487
c[3] = a[3] + b[3] = 58597
c[4] = 0
Você já está começando a entender? Agora vamos fazer uma correção porque, na nossa notação, todos os números não podem ter mais de 9 algarismos. Se o número tiver mais de 9 algarismos, então tire o algarismo que sobrar, e some-o com o número que está na próxima posição do array. Nesse caso:
c[0] = 1308546322, mas é >= 1000000000, então vamos achar o resto da divisão por 1000000000, que vai dar 308546322
Ou seja, c[0] = 308546322. A divisão de 1308546322 por 1000000000 dá 1, que será somada a c[1].
c[1] = 1384738228 + 1 = 1384738229
Achando o resto e fazendo a divisão, vemos que c[1] = 384738229 e devemos somar 1 a c[2].
c[2] = 1744820487 + 1 = 1744820488
Então c[2] = 744820488, devemos somar 1 a c[3]
c[3] = 58597 + 1 = 58598
c[4] = 0
Para converter o número de novo para uma string, devemos então pegar cada int no array c, e imprimi-lo com 9 algarismos, completando com zeros à esquerda se for o caso. Não se esquecer que é para pegar cada número de trás para frente. Pus alguns espaços para você entender melhor.
000000000 000058598 744820488 384738229 308546322
Agora, vamos comparar com o resultado esperado:
58598744820488384738229308546322
Viu? Deu igualzinho.
O que mostrei funciona em Java, C, VB, não importa a linguagem.