
_Créditos das imagens: Grok
# Multiplicação Chinesa vs. Russa: Técnicas Antigas e Implementação em xBase
A matemática sempre nos presenteia com métodos criativos para resolver problemas aparentemente simples. Duas técnicas fascinantes para a multiplicação de números – a **Multiplicação Chinesa** e a **Multiplicação Russa** – demonstram que, mesmo sem o uso das convenções modernas, é possível chegar a resultados corretos através de abordagens alternativas. Neste artigo, vamos comparar essas duas técnicas, ilustrar seus processos com exemplos gráficos e discutir como foram implementadas em xBase, ampliando os horizontes para o processamento de números muito grandes.
A multiplicação é uma operação fundamental na matemática, e diferentes culturas desenvolveram métodos únicos para realizá-la. Neste artigo, exploraremos duas técnicas fascinantes: a **multiplicação chinesa** (baseada em grids/lattice) e a **multiplicação russa** (também conhecida como "multiplicação camponesa"), além de analisar uma implementação prática desta última em xBase.
---
## Multiplicação Chinesa
A **Multiplicação Chinesa** é baseada na formação de uma grade ou matriz onde os dígitos dos números a serem multiplicados são dispostos. Cada célula desta grade representa o produto parcial entre os dígitos, e os resultados são somados pelas diagonais, permitindo o tratamento organizado dos “vai um” (carries).
---
### **Multiplicação Chinesa: O Poder dos Grids**
A técnica chinesa, ou *lattice multiplication*, organiza os números em uma grade, decompondo os dígitos e somando resultados diagonalmente. Por exemplo, para multiplicar **21 × 13**:
1. Desenhe uma grade 2x2 (para números de dois dígitos).
2. Escreva 2 e 1 nas colunas superiores, 1 e 3 nas linhas laterais.
3. Multiplique dígitos cruzados (2×1, 2×3, 1×1, 1×3) e preencha as células.
4. Some as diagonais:
- Resultado: **273** (confira [aqui](https://www.blacktdn.com.br/2025/02/blacktdn-tecnica-de-multiplicacao.html) para detalhes visuais).
**Vantagem**: Ideal para números grandes, com decomposição visual clara.
### Exemplo Gráfico
Considere a multiplicação de **23** por **45**:
```
2 3
-----------
4 | 2×4 2×5 → 8 10
-----------
5 | 3×4 3×5 → 12 15
```
**Agrupamento Diagonal:**
- **Diagonal 1 (inferior direita):** 15
- **Diagonal 2 (centro):** 10 + 12 = 22
- **Diagonal 3 (superior esquerda):** 8
**Processamento dos "Vai Um":**
1. **Diagonal 1:** 15 → Dígito 5 e vai um 1
2. **Diagonal 2:** 22 + 1 = 23 → Dígito 3 e vai um 2
3. **Diagonal 3:** 8 + 2 = 10 → Dígito 0 e vai um 1
4. **Vai um final:** 1
O resultado final, lendo da esquerda para a direita, é **1 0 3 5** ou **1035**.
### Implementação e Referências
A técnica e seus detalhes foram abordados no blog da [BlackTDN](https://www.blacktdn.com.br/2025/02/blacktdn-tecnica-de-multiplicacao.html), onde você pode encontrar uma explanação completa do método. Essa abordagem clássica inspirou também implementações modernas, inclusive em xBase, demonstrando a versatilidade do método em diferentes linguagens.
---
## Multiplicação Russa
A **Multiplicação Russa**, também conhecida como *Multiplicação Egípcia* ou *Peasant Multiplication*, adota um método iterativo que envolve a duplicação de um número (multiplicador) e a divisão do outro (multiplicando) por 2. Sempre que o multiplicando for ímpar, o multiplicador é somado ao resultado. Esse processo continua até que o multiplicando se torne zero.
---
### **Multiplicação Russa: Simplicidade Binária**
A técnica russa usa **duplicação e divisão inteira** para calcular produtos. Por exemplo, **21 × 13**:
1. Divida 21 por 2 repetidamente (ignorando decimais) e multiplique 13 por 2:
```
21 13 → 13 (21 é ímpar)
10 26 → ignorado (10 é par)
5 52 → 52 (5 é ímpar)
2 104 → ignorado
1 208 → 208 (1 é ímpar)
```
2. Some os valores marcados: **13 + 52 + 208 = 273**.
**Vantagem**: Não requer tabuada completa, apenas operações binárias.
### Exemplo Gráfico
Utilizando os números **340** e **125**, temos o seguinte processo:
```
340 x 125
170 x 250
85 x 500 → +500 (85 é ímpar)
42 x 1000
21 x 2000 → +2000 (21 é ímpar)
10 x 4000
5 x 8000 → +8000 (5 é ímpar)
2 x 16000
1 x 32000 → +32000 (1 é ímpar)
--------------------------
Resultado: 42500
```
Cada linha representa a duplicação (ou divisão) até que o valor do multiplicando chegue a zero. Os valores do multiplicador são acumulados sempre que o multiplicando é ímpar, formando o total do produto.
### Implementação em xBase
---
### **Implementação em xBase: Eficiência e Legibilidade**
O algoritmo russo foi implementado em xBase (linguagem usada em sistemas legados como Clipper/Harbour). Confira os códigos:
- [Versão 1](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/_00/gifts/002-russian_multiplication/russian_multiplication.1.prg)
- [Versão 2](https://github.com/naldodj/naldodj-xbase-leetcode-solutions/blob/main/src/hb/_00/gifts/002-russian_multiplication/russian_multiplication.2.prg)
**Estrutura do Código**:
1. **Loop com divisão inteira**: Enquanto um número é maior que 1, ele é dividido por 2.
2. **Acumulação condicional**: Se o número atual for ímpar, seu par é adicionado ao total.
3. **Duplicação contínua**: O segundo número é duplicado a cada iteração.
**Exemplo de Trecho**:
```xBase
FUNCTION RussianMultiplication(a, b)
local total := 0
while (a>0)
if ((a%2)!=0)
total+=b
endif
a:=INT(a/2)
b:=b*2
end while
return(total)
```
Duas versões em xBase para a **Multiplicação Russa** foram implementadas, demonstrando a adaptabilidade dessa técnica para lidar com números extensos. As implementações estão disponíveis nos seguintes links:
Essas implementações demonstram como o xBase pode ser utilizado para realizar operações com números muito grandes, tratando os valores como strings e utilizando funções auxiliares para operações aritméticas básicas (como adição, divisão e multiplicação).
---
## Comparação Entre as Técnicas
| **Aspecto** | **Multiplicação Chinesa** | **Multiplicação Russa** |
|-----------------------------|------------------------------------------------------------|----------------------------------------------------------|
| **Método** | Uso de uma grade/matriz para multiplicar dígitos e somar diagonais. | Processo iterativo de duplicação (dobrar) e divisão (halving). |
| **Visualização** | Diagrama em grade com somas diagonais (ex: 23 x 45). | Tabela de operações com halving e doubling (ex: 340 x 125). |
| **Processamento de “Vai Um”** | Lida com "carry" de forma diagonal e acumulativa. | Acumula o valor do multiplicador sempre que o multiplicando é ímpar. |
| **Complexidade de Implementação** | Pode ser mais intuitiva para visualização dos dígitos. | Iterativa e pode ser mais simples de implementar logicamente. |
| **Aplicação** | Útil para demonstrar processos de soma e agrupamento. | Eficiente para operações com números muito grandes quando tratados como strings. |
Ambas as técnicas possuem seus encantos e desafios. A Multiplicação Chinesa enfatiza a visualização do processo e a disposição dos dígitos, enquanto a Multiplicação Russa destaca-se pela simplicidade iterativa, facilitando a implementação em linguagens que requerem manipulação manual de grandes números, como o xBase.
---
## Conclusão
A escolha entre a Multiplicação Chinesa e a Russa pode depender do contexto e da preferência pessoal. No entanto, ambas demonstram a riqueza histórica dos métodos matemáticos e sua adaptabilidade para o desenvolvimento de soluções modernas em ambientes de programação como o xBase. Se você se interessa por desafios matemáticos e por explorar diferentes técnicas, vale a pena conferir tanto o [tutorial sobre Multiplicação Chinesa da BlackTDN](https://www.blacktdn.com.br/2025/02/blacktdn-tecnica-de-multiplicacao.html) quanto as implementações da Multiplicação Russa disponíveis nos repositórios mencionados.
---
**Hashtags:**
#xBase, #MultiplicaçãoChinesa, #MultiplicaçãoRussa, #Matemática, #Tecnologia, #Programação, #Harbour, #CódigoAberto, #Inovação, #DesafiosMatemáticos
Comentários
Postar um comentário