Preguntas de prueba VIP práctica básica suma de alta precisión (lenguaje C)

Límite de recursos

Límite de tiempo: 1,0 s Límite de memoria: 512,0 MB

Descripción del problema

  Entrada de dos números enteros de un y b , y la salida de la suma de estos dos números enteros. Tanto a como b no superan los 100 dígitos.

Descripción del algoritmo

  Dado que tanto a como b son relativamente grandes, no se pueden almacenar directamente utilizando tipos de datos estándar en el idioma. Para este tipo de problema, generalmente use una matriz para solucionarlo.
  Defina una matriz A , A [0] para almacenar un bit, A [. 1] para almacenar una decena, y así sucesivamente. También puede utilizar una matriz B para almacenar b .
  Al calcular c  =  a  +  b , primero agregue A [0] y B [0]. Si ocurre un acarreo, almacene el acarreo (es decir, el dígito de las decenas de la suma ) en r , y almacene el único dígito de la suma Ingrese C [0], es decir, C [0] es igual a ( A [0] + B [0])% 10. Luego calcule la suma de A [1] y B [1]. En este momento, el valor r del orden inferior también debe sumarse, es decir, C[1] debe ser la suma de A [1], B [1] y r . Si ocurre otro acarreo, el nuevo acarreo aún se puede almacenar en r , y el dígito de las unidades de la suma se puede almacenar en C [1]. Por analogía, se pueden encontrar todos los bits de C.
  Finalmente, la salida C.

Formato de entrada

  La entrada consta de dos líneas, la primera línea es un número entero no negativo a y la segunda línea es un número entero no negativo b . Ambos números enteros no superan los 100 dígitos y el dígito más alto de los dos números no es 0.

Formato de salida

  Salida de una línea, que representa el valor de b .

Entrada de muestra

20100122201001221234567890
2010012220100122

Salida de muestra

20100122203011233454668012

 Es el gran 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;

}

 

Supongo que te gusta

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