zoukankan      html  css  js  c++  java
  • A+B

    前言:

    在数学运算的过程中 ,经常碰到这样的问题:参与运算的 数字很大或者对运算结果的精度要求很高。无论何种计算机 语言 ,在描述数据类型时都有一定的精度和位数要求 ,比如说 16 位整型数 (int) 所能表示的范围为 - 32768~32767 ,实数 (float)所能表示的精度为小数点后 8 位等 ,每种类型的数据都 有其精度和位数限制。超过 20 位有效数字的数值一般就无法表示了。所以 ,在上述情况下,采用一般的程序设计无法满 足要求 ,必须采用高精度的数学运算才能实现。如下例

    #1000 : A + B

    时间限制:1000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    求两个整数A+B的和

    输入

    输入包含多组数据。
    每组数据包含两个整数A(1 ≤ A ≤ 100)和B(1 ≤ B ≤ 10000000)。

    输出

    对于每组数据输出A+B的和。

    样例输入
    1 2
    3 4
    样例输出
    3
    7

     

    分析:

    在加法运算中 ,并没有考虑参与运算的数的位数 , 即使有小数也是一样。每次运算时只是利用加法运算的规则 对参与运算的每一位进行运算 ,每次运算都是在 10 以内进 行 ,并加上了前面的进位。通过这种运算就可以非常准确得到运算结果,并且可以不考虑位数和精度的问题。考虑到计算机的存储问题 ,如果我们采用数组来存储参与运算的每个加数 ,则需要将上面参与运算的数看成字符,并将原来的数翻转。

    实现算法如下:

    1.将 A、 B 按位对齐;

    2.低位开始逐位相减;

    3.对结果做借位调整。

     1 import java.math.BigDecimal;  
     2 import java.util.*;  
     3 public class Main  
     4 {  
     5     public static void main(String[] args)  
     6     {  
     7         BigDecimal a, b, c;  
     8         Scanner cin = new Scanner(System.in);  
     9         while(cin.hasNext())  
    10         {  
    11             a = cin.nextBigDecimal();  
    12             b = cin.nextBigDecimal();  
    13             c = a.add(b);  
    14             if(c.compareTo(BigDecimal.ZERO) == 0)  
    15                 System.out.println("0");  
    16             else  
    17                 System.out.println(c.stripTrailingZeros().toPlainString());  
    18         }  
    19     }  
    20 }  
  • 相关阅读:
    如何配置透明发光的骚气 vscode —— Jinkey 原创
    JS引用类型总结
    element UI -- 默认样式修改不成功原因
    上传本地Vue项目到github
    网页加载速度优化方法总结
    移动端click时间、touch事件、tap事件详解
    移动端开发用touch事件还是click事件
    禁止网站调用favicon.ico请求
    HTTP里面的响应和请求
    jave script 中this的指向 (六种场景)
  • 原文地址:https://www.cnblogs.com/joeaaron007/p/4222226.html
Copyright © 2011-2022 走看看