zoukankan      html  css  js  c++  java
  • 高精度:基础练习 高精度加法

    问题描述
      输入两个整数ab,输出这两个整数的和。ab都不超过100位。
    算法描述
      由于ab都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。
      定义一个数组AA[0]用于存储a的个位,A[1]用于存储a的十位,依此类推。同样可以用一个数组B来存储b
      计算c = a + b的时候,首先将A[0]与B[0]相加,如果有进位产生,则把进位(即和的十位数)存入r,把和的个位数存入C[0],即C[0]等于(A[0]+B[0])%10。然后计算A[1]与B[1]相加,这时还应将低位进上来的值r也加起来,即C[1]应该是A[1]、B[1]和r三个数的和.如果又有进位产生,则仍可将新的进位存入到r中,和的个位存到C[1]中。依此类推,即可求出C的所有位。
      最后将C输出即可。
    输入格式
      输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。两个整数都不超过100位,两数的最高位都不是0。
    输出格式
      输出一行,表示a + b的值。
    样例输入
    20100122201001221234567890
    2010012220100122
    样例输出
    20100122203011233454668012
     
    思路:先各位相加,最后判断是否进位,前几天写过,刚学了点c++,所以用c++又写了一下。
     1 #include<iostream>
     2 #include<string>
     3 
     4 using namespace std;
     5 
     6 #define max(a,b) (a > b ? a : b)
     7 
     8 void add(string longString, string shortString, int* num3)
     9 {
    10     int k = -1;
    11     int longLen = longString.size();
    12     int shortLen = shortString.size();
    13 
    14     for (int i = 1; i <= longLen; i++)
    15     {
    16         num3[i] = longString[longLen - i] - 48;
    17     }
    18     for (int i = 1; i <= shortLen; i++)
    19     {
    20         num3[i] += shortString[shortLen - i] - 48;
    21     }
    22 }
    23 
    24 int main()
    25 {
    26     string num1;
    27     string num2;
    28     int *num3 = new int[102];
    29     int k = -1;
    30 
    31     cin >> num1;
    32     cin >> num2;
    33 
    34     if (num1.size() >= num2.size()) //如果1长1作为长字符串
    35     {
    36         add(num1, num2, num3);
    37     }
    38     else
    39     {
    40         add(num2, num1, num3); //如果2长2作为长字符串
    41     }
    42     
    43     int m = max(num1.size(), num2.size());
    44     for (int i = 1; i <= m; i++)
    45     {
    46         if (num3[i] >= 10)
    47         {
    48             num3[i] -= 10;
    49             ++num3[i + 1];
    50         }
    51     }
    52 
    53     if (num3[m + 1] > 0)
    54     {
    55         m++;
    56     }
    57 
    58 
    59     for (int i = m; i >= 1; i--)
    60     {
    61         cout << num3[i];
    62     }
    63 
    64     return 0;
    65 }
  • 相关阅读:
    AIDL interface XXX should be declared in a file
    ubuntu下安装android sdk运行模拟器出现错误:
    C# Winform使用Windows Media Player播放多媒体整理
    Asp.Net Core IIS发布后PUT、DELETE请求错误405.0
    Js 判断浏览器类型整理
    Asp.Net Core 框架源码地址
    ASP.NET Core中使用Razor视图引擎渲染视图为字符串(转)
    Asp.Net Core 自定义设置Http缓存处理
    ASP.NET Core -中间件(Middleware)使用
    Asp.Net Core 通过自定义中间件防止图片盗链的实例(转)
  • 原文地址:https://www.cnblogs.com/ZhengLijie/p/12696017.html
Copyright © 2011-2022 走看看