## Adición de alta precisión JAVA (práctica de copa Blue Bridge)

Adición de alta precisión JAVA (práctica de copa Blue Bridge)

Descripción del problema

Ingrese dos números enteros ayb, y genere la suma de estos dos números enteros. Tanto a como b no superan los 100 dígitos.

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 tratar.
  Defina una matriz A, A [0] se usa para almacenar el lugar de las unidades de a, A [1] se usa para almacenar el lugar de las decenas de a, 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 hay un acarreo, almacene el acarreo (es decir, el dígito de las decenas de la suma) en r, y almacene el único dígito del 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 de orden inferior r también debe sumarse, es decir, C [1] debe ser los tres números A [1], B [ 1] y r 的 和。 La suma. 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.

Análisis de ideas El
  
   tema ha aclarado la idea Utilizar arrays para los cálculos Como en la multiplicación anterior, se procesan los dos números y las decenas por separado y se realiza el acarreo.

el código se muestra a continuación

public class test13 {
    
    
	public static void main(String[] args) {
    
    
		Scanner sc=new Scanner(System.in);
		
		String n1 = sc.nextLine();
		String n2 = sc.nextLine();
		int[] a=new int[101];
		int[] b=new int[101];
		int[] result=new int[101];
		for (int i = 0; i < a.length; i++) {
    
    //初始化
			result[0]=a[i]=b[i]=0;
		}
		for (int i = 0; i < n1.length(); i++) {
    
    
			a[i]=n1.charAt(n1.length()-1-i)-48;
			//charAt方法返回的是char类型,要转成int减去48即可;
		}
		for (int i = 0; i < n2.length(); i++) {
    
    
			b[i]=n2.charAt(n2.length()-1-i)-48;
		}
		//计算
		int ge=0,shi=0,count=0;
		for (int i = 0; i < 101; i++) {
    
    
			count=a[i]+b[i]+shi;//将两个个位相加
			ge=count%10;//将得到的数各位和十位分开进行处理
			shi=count/10;
			result[i]=ge;//各位放入结果数组
		}
		int i;
		for ( i = result.length-1; i >=0 ; i--) {
    
    //倒着找到不为0的数字 然后输出
			if (result[i]!=0) {
    
    
				break;
			}			
		}
		for (int x = i; x >=0; x--) {
    
    
			System.out.print(result[x]);
		}
	}
}

Supongo que te gusta

Origin blog.csdn.net/qq_45657198/article/details/113824169
Recomendado
Clasificación