zoukankan      html  css  js  c++  java
  • 数据结构实训(一)--- 大整数求和

    【问题描述】大整数求和
    用某种程序设计语言进行编程时,可发能需要处理非常大或者运算精度要求非常高的整数(称为大整数),这种大整数用该语言的基本数据类型无法直接表示。处理大整数的一般方法是用数组存储大整数,即开辟一个比较大的整型数组,数组元素代表大整数的一位,通过数组元素的运算模拟大整数的运算。
    已知大整数,,求C=A+B。可以用两个顺序表A和B分别存储两个大整数,用顺序表C存储求和结果。为了便于执行加法运算,可以将大整数的低位存储到顺序表的低端,顺序表的长度表示大整数的位数。
    【输入形式】两个大整数的数位数字。
    【输出形式】按照从高位到低位的顺序输出求和结果C。
    【样例输入】
    987654321
    99997531
    【样例输出】
    1087651852
    【说明】如果从键盘输入大整数,一般用字符数组存储,这样无需对大整数进行分段输入,当然输入到字符数组后需要将字符转换为数字。

    #include<iostream>
    #include<string>
    using namespace std;
    
    const int MaxSize = 1000;
    int main()
    {
        string s1,s2;
        cin >> s1 >> s2;
        int* num1 = new int[MaxSize];
        int* num2 = new int[MaxSize];
        int* num3 = new int[MaxSize+1];
        int len1 = s1.size();
        int len2 = s2.size();
        for(int i=0; i < len1; i++){
            int temp = s1[i] - '0';
            num1[s1.size()-1-i] = temp;
        }
    
        for(int i=0; i < len2; i++){
            int temp = s2[i] - '0';
            num2[s2.size()-1-i] = temp;
        }
    
        int over = 0;
        int length = 0;
        for(int i=0; i<len1||i<len2; i++){
    
            num3[i] = (num1[i] + num2[i] + over)%10;
            over = (num1[i] + num2[i] + over)/10;
            length++;
        }
    
        if(over > 0){
            num3[length] = over;
        }
        else{
            length--;
        }
    
        for(int i=length; i>=0 ; i--){
            cout<<num3[i];
        }
    }
  • 相关阅读:
    visual studio项目多级引用不拷贝dll的问题
    ef6 code first,对已有数据库如何执行迁移
    wsl 修改默认安装路径
    Windows docker镜像文件无法删除
    Docker镜像下载很慢,各种加速无效
    activemq整合springboot使用(个人微信小程序用)
    angular入门一之环境安装及项目创建
    jquery中attr()和prop()的区别
    IntelliJ IDEA部署web项目,Tomcat没有出现Artifacts
    IntelliJ IDEA:创建Java Web工程
  • 原文地址:https://www.cnblogs.com/DullRabbit/p/12558690.html
Copyright © 2011-2022 走看看