• 大整数求和


    大整数求和

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

     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 }

     运行结果如下:

     

  • 相关阅读:
    iOS基础开发集锦
    ARC&&MRC 内存管理
    iOS博客 视频课程网站
    iOS 切图规范
    ipa 重新签名
    企业证书管理
    判断是否有权限访问相机,相册,定位
    iOS 项目优化
    自定义返回按钮
    SVN 地址
  • 原文地址:https://www.cnblogs.com/smile233/p/8715810.html
Copyright © 2020-2023  润新知