zoukankan      html  css  js  c++  java
  • C++之大数加法

      加法加法。一看到加法就觉得简单,其实不然。因为存储长度的限制,有时候计算1234567891011121345+53616456641321345466613这种加法的时候就会出现很多意料之外的问题。随便的丢出两个int相加,甚至long int相加根本得不到结果。于是,需要借助其他的方式了。

      我们平时自己处理这么大数的加法时都会用竖式,而且是逐个相加,满10进1。以此为基点,我们可以联想到运用string类来处理这些数,将他们的每一位都存储在string中,那么长度为1000的数组就能存储1000位的数字,这样不就可以解决了。

    //
    //  main.cpp
    //  yy
    //
    //  Created by MadMarical on 15/11/25.
    //  Copyright (c) 2015年 com. All rights reserved.
    //
    
    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <stdexcept>
    
    using namespace std;
    
    #define MAXN 1000
    
    int a[MAXN],b[MAXN];
    
    int main(int argc, const char * argv[])
    {
        string str1,str2;//保存输入
        long int len1,len2;
        long int i,j,k;
        int up;
        
        /*输入流程*/
        cin>>str1>>str2;
        
        /*初始化各量*/
        len1 = str1.length();
        len2 = str2.length();
        memset(a, 0, sizeof(a));
        memset(b, 0, sizeof(b));
        
        /*注意,必须倒着保存数据*/
        for (i = len1 - 1, k = 0; i != -1; -- i)
        {
            a[k] = str1[i] - '0';
            k++;
        }
        for (j = len2 - 1, k = 0; j != -1; -- j)
        {
            b[k] = str2[j] - '0';
            k++;
        }
        for (i = 0, up = 0; i < MAXN; ++ i)
        {
            a[i] = a[i] + b[i] + up;
            up = a[i] / 10;
            a[i] %= 10;
        }
        for (i = MAXN - 1; i != -1; -- i)
        {
            if (a[i])
            {
                break;
            }
        }
        for (k = i; k != -1; --k)
        {
            cout<<a[k];
        }
        return 0;
    }

    反思:

    1.细心还是细心,不细心连几个初始化变量为啥子要初始化成这样都搞不明白。

    2.算法的重要度可见一斑,稍微改一下思路,代码量就陡增而且问题随之而来。有时候,简单一点的想法未尝不可以尝试。

    3.牢记各模块的知识。

  • 相关阅读:
    static、final、this、super关键
    细节二:参数、引用类型、实例化
    枚举类型
    单例模式
    细节一:字符串、switch、默认值、数组
    类属性和类方法
    装饰器模式
    TreeSet
    可见参数和增强for以及自动拆装箱
    静态导入
  • 原文地址:https://www.cnblogs.com/thewaytomakemiracle/p/4996622.html
Copyright © 2011-2022 走看看