zoukankan      html  css  js  c++  java
  • 大整数求和

    大整数求和

      摘要:对于一些大整数,如果超出电脑整型数所能表示的最大范围,应该怎么计算加法呢?我们可以利用字符串进行求和,具体代码如下:

     1 #include<iostream>
     2 #include<string>
     3 using namespace std;
     4 string Add(string &str1, string &str2);
     5 int main()
     6 {
     7     string str1, str2;
     8     cin >> str1 >> str2;
     9     cout << Add(str1, str2) << endl;
    10  }
    11 
    12 string Add(string & str1, string & str2)
    13 {
    14     int flag = 0;  // 进位标记
    15     int i = 0; // 位数
    16     int n = str1.size();
    17     int m = str2.size();
    18     // 整数是从最低位开始相加,所以先将字符串反序
    19     reverse(str1.begin(), str1.end());
    20     reverse(str2.begin(), str2.end());
    21     string res = "";// 存放结果的串
    22     while (i < n && i < m)
    23     {        
    24         res+=(((str1[i] - '0') + (str2[i] - '0') + flag) % 10 + '0');// 计算第i位的值
    25         flag = ((str1[i] - '0') + (str2[i] - '0') + flag) / 10;    // 计算第i位的进位
    26         i++;
    27     }
    28     // 如果str1表示的整数位数更多,计算大整数str1余下的部分
    29     while (i < n)
    30     {    
    31         res+= (((str1[i] - '0') + flag) % 10 + '0');// 计算第i位的值
    32         flag = ((str1[i] - '0') + flag) / 10;    // 计算第i位的进位
    33         i++;
    34     }
    35     // 如果str2表示的整数位数更多,计算大整数str2余下的部分
    36     while (i < m)
    37     {        
    38         res+= (((str2[i] - '0') + flag) % 10 + '0');// 计算第i位的值
    39         flag = ((str2[i] - '0') + flag) / 10;    // 计算第i位的进位
    40         i++;
    41     }
    42     // 最高位是否有进位,设置最高位的值44     if (flag == 1)
    45         res+= '1';
    46     // 反序结果串,结果即为所求
    47     reverse(res.begin(), res.end());
    48     return res;
    49 }

     运行结果如下:

     

  • 相关阅读:
    JSDeferred 源码分析
    前端MVVM框架avalon揭秘
    前端MVVM框架avalon揭秘
    轻量级前端MVVM框架avalon源码分析-总结
    JavaScript 中介者模式与观察者模式有何不同?
    Knockout 新版应用开发教程之"text"绑定
    Knockout 新版应用开发教程之"visible"绑定
    Knockout 新版应用开发教程之Observable Arrays
    设计模式之美:Decorator(装饰)
    设计模式之美:Composite(组合)
  • 原文地址:https://www.cnblogs.com/smile233/p/8715810.html
Copyright © 2011-2022 走看看