Perguntas do teste VIP prática básica adição de alta precisão (linguagem C)

Limite de recursos

Limite de tempo: 1.0s. Limite de memória: 512.0 MB

Descrição do Problema

  Entrada dois inteiros a e b , e a saída da soma destes dois números inteiros. Tanto a quanto b não excedem 100 dígitos.

Descrição do Algoritmo

  Uma vez que tanto a e b são relativamente grandes, eles não podem ser armazenados diretamente usando tipos de dados padrão na língua. Para esse tipo de problema, geralmente use uma matriz para lidar com ela.
  Defina uma matriz A , A [0] para armazenar um ésimo bit, A [. 1] para armazenar um dez e assim por diante. Você também pode usar uma matriz B para armazenar b .
  Ao calcular c  =  a  +  b , primeiro adicione A [0] e B [0]. Se ocorrer um transporte, armazene o transporte (ou seja, o dígito das dezenas da soma ) em r e armazene o único dígito da soma Insira C [0], ou seja, C [0] é igual a ( A [0] + B [0])% 10. Em seguida, calcule a adição de A [1] e B [1]. Neste momento, o valor r da ordem inferior também deve ser adicionado, ou seja, C[1] deve ser a soma de A [1], B [1] e r . Se ocorrer outro transporte, o novo transporte ainda pode ser armazenado em r , e o dígito da unidade da soma pode ser armazenado em C [1]. Por analogia, todos os bits de C podem ser encontrados .
  Finalmente, a saída C.

Formato de entrada

  A entrada consiste em duas linhas, a primeira linha é um inteiro não negativo a , e a segunda linha é um inteiro não negativo b . Ambos os números inteiros não excedem 100 dígitos e o dígito mais alto dos dois números não é 0.

Formato de saída

  Produza uma linha, representando o valor de b .

Entrada de amostra

20100122201001221234567890
2010012220100122

Saída de amostra

20100122203011233454668012

 É o grande número A + B

 

#include<bits/stdc++.h>
using namespace std;


int main()
{
	int z;
	int n,i,j;
	char m1[110],m2[110];
    int a[110],b[110],c[110];
	
	for(i=0;i<=110;i++)//初始化int数组不要忘记 
	a[i]=b[i]=c[i]=0;
	
	
	scanf("%s%s",m1,m2);
	int l1=strlen(m1);
	int l2=strlen(m2);
	
	
	for(i=l1-1,j=0;i>=0;i--)//把输入的字符串倒序输入到int数组中
	a[j++]=m1[i]-'0';//转换成 整形 
	for(i=l2-1,j=0;i>=0;i--)
	b[j++]=m2[i]-'0';
	
	
	
	for(i=0;i<=110;i++)//这里开始加法模拟; 
	{
		c[i]+=a[i]+b[i];
		if(c[i]>=10)//这里是大于等于 
		{
			c[i]=c[i]%10;
			c[i+1]++; //给前一位加上 
		}
	}
	
	
	for(z=110;c[z]==0;z--);//除去前导0,这里是==这里的冒号不要忘记了 
 
	if(z<0)
	printf("0\n");
	else
	{
		for(;z>=0;z--)//这里的输出不需要头 
		printf("%d",c[z]);
		printf("\n");
		
	}
	return 0;

}

 

Acho que você gosta

Origin blog.csdn.net/with_wine/article/details/114989973
Recomendado
Clasificación