Multiplicação de alta precisão Orsay One Pass T1307

Link do tópico

[Descrição do título] Insira dois inteiros positivos de alta precisão M e N (ambos M e N têm menos de 100 dígitos). Encontre o produto desses dois números de alta precisão.
[Entrada] Insira dois inteiros positivos de alta precisão M e N.
[Saída] Encontre o produto desses dois números de alta precisão.
【Amostra de entrada】

36
3

[Amostra de saída]

108

Os comprimentos de M e N são muito maiores do que o escopo de int, precisamos armazenar esses dois números grandes em strings e simular manualmente o processo de multiplicação.
Acho que a dificuldade é a posição da string no processo de simulação, porque os bits altos de M e N após a leitura são o subscrito 0 da string, e o resultado final do armazenamento é o bit baixo armazenado no subscrito 0 da string .
Um conjunto de matrizes de teste está longe de ser suficiente. Recomenda-se testar e testar dados como 99 × 9 9999 × 99 1000 × 10 10 × 1000 85695 × 5 6 × 26522 depois de escrever o código. Se for aprovado, será provavelmente não será problema.
Para simular o processo de multiplicação, eu multiplico o primeiro número pelo segundo número de baixo para cima e armazeno os resultados na mesma string de soma (resultado). Preste atenção ao tratamento de casos em que há transporte quando multiplicado para o último dígito.

#include<iostream>
#include<cstdio>
using namespace std;
int sum[500]={
    
    0};
string m,n;
void cheng(int i,int x)
{
    
    
	int last1=0;
	int last2=0;
	int ex;
	int now=0;
	for(int j=m.length()-1;j>=0;j--)
	{
    
    
		now=(x*(m[j]-'0')+last1)%10;
		last1=(x*(m[j]-'0')+last1)/10;
		
		ex=(last2+now+sum[i+m.length()-j-1])/10;
		sum[i+m.length()-j-1]=(last2+now+sum[i+m.length()-j-1])%10;
		last2=ex;
	}
	sum[i+m.length()]+=(last1+last2);
}
int main()
{
    
    
	cin>>m;
	cin>>n;
	for(int i=n.length()-1;i>=0;i--)
	{
    
    
		cheng(n.length()-i-1,n[i]-'0');
	}
	int i=499;
	while(sum[i]==0)
	i--;
	while(i>=0)
	{
    
    
		printf("%d",sum[i]);
		i--;
	}
	printf("\n");
	return 0;
}

Acho que você gosta

Origin blog.csdn.net/Huo6666/article/details/113000448
Recomendado
Clasificación