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 a + b .
Entrada de muestra
20100122201001221234567890
2010012220100122Salida 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;
}