Informática Orsay Yitong 1168: suma de enteros grandes (papá)

1168: suma entera grande


Límite de tiempo: 1000 ms Límite de memoria: 65536 KB
Confirmaciones: 30362 Pases: 9123

【Descripción del título】

Encuentre la suma de dos enteros no negativos que no excedan los 200 dígitos.

【Entrar】

Hay dos líneas, cada línea es un número entero no negativo con no más de 200 dígitos y puede tener ceros iniciales adicionales.

【Salida】

Una línea es el resultado de la adición. No puede haber ceros iniciales adicionales en el resultado, es decir, si el resultado es 342, entonces no se puede generar como 0342.

【Ejemplo de entrada】

22222222222222222222
33333333333333333333

[Salida de muestra]

55555555555555555555

 

#include<bits/stdc++.h>
using namespace std;
int a[2005],b[2005],c[2005],la,lb,lc,x=0;
char a1[2005],b1[2005];
int main(){
  	freopen("test.in","r",stdin);
  	freopen("test.out","w",stdout);
  	gets(a1);
	gets(b1);
	la = strlen(a1); 
	lb = strlen(b1);
	for(int i=0;i<la;i++){
		a[la-i-1]=a1[i]-'0'; // 要注意,这里是从数组的0开始,所以要-1  la-i-1 
	}
	for(int i=0;i<lb;i++){
		b[lb-i-1]=b1[i]-'0';
	}
	lc=0;	
	while(lc<max(la,lb)){ // 要运行到两个数最大的位数,才算完成 
//		printf("c[%d]=a[%d]+b[%d]+x=%d+%d+%d\n",lc,lc,lc,a[lc],b[lc],x);
		c[lc] = a[lc] + b[lc] +x;
		x = c[lc]/10;
		c[lc] %= 10;
		lc++;
	} 
	c[lc] = x;
	while(c[lc]==0){ // 舍去最后末尾的进位的0 ,当上面的x=0时候,会产生多一个进位0(乘法可能会多个0,所以用while舍去)
		lc--;
	}	
//	cout<<lc<<endl;
	for(int i=lc;i>=0;i--){
		cout<<c[i]; // 倒序输出,并且输出到0的位置 
	}
	return 0;
}

 

 

 

Publicado 33 artículos originales · me gusta 0 · visitas 167

Supongo que te gusta

Origin blog.csdn.net/weixin_42790071/article/details/105482457
Recomendado
Clasificación