zoukankan      html  css  js  c++  java
  • [蓝桥杯][基础训练]高精度加法

    Description

    输入两个整数a和b,输出这两个整数的和。a和b都不超过100位。

    Input

    输入包括两行,第一行为一个非负整数a,第二行为一个非负整数b。两个整数都不超过100位,两数的最高位都不是0。

    Output

    输出一行,表示a + b的值。

    Sample Input

    20100122201001221234567890
    2010012220100122
    

    Sample Output

    20100122203011233454668012
    

    More Info

    由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储。对于这种问题,一般使用数组来处理。



     1 #include<iostream>
     2 //#include<fstream>
     3 using namespace std;
     4 int main(){
     5     int k=0,c[103];//c数组用来存储和 
     6     int t=0;//1.用来当第一个加数与第二个加数与进位的和
     7             //2.t/10以后可以当新的进位 
     8     string a,b;
     9 //    fstream file("haha.txt");
    10     getline(cin,a);
    11     getline(cin,b);
    12     int la=a.size()-1;
    13     int lb=b.size()-1;
    14     while(la>=0||lb>=0){ //一位一位的加 ,从后边开始 
    15         if(la>=0&&lb>=0)//如果两个加数都有,
    16                         //就加a那一位和b那一位和进位的和 
    17             t+=a[la]-'0'+b[lb]-'0';
    18         if(la>=0&&lb<0) //如果缺b,就只加a那一位和进位的和 
    19             t+=a[la]-'0';
    20         if(la<0&&lb>=0)//如果缺a,就只加b那一位和进位的和 
    21             t+=b[lb]-'0';
    22         c[k++]=t%10;//t对10取模后的数存进c数组 
    23         t=t/10;//t/10以后成为新的进位 
    24         la--;//进行下一位 
    25         lb--;//进行下一位            
    26     }
    27     if(t!=0)//如果最高的位有进位,那么把这个进位也要输出
    28             //比如99+1,如果没有这一步的话,结果就是00 
    29         c[k++]=t; 
    30     for(int i=k-1;i>=0;i--)//倒着输出 
    31         cout<<c[i];
    32     return 0;
    33 }

     

     

    这里这个代码是很好的一个模板,很简洁。

    高精度加法就是用数组来存储加数,然后模拟竖式运算一位一位的加

    加的时候会产生进位,主要是要处理好这个进位

     

     






  • 相关阅读:
    P4127 [AHOI2009]同类分布
    区间DP
    P3146 [USACO16OPEN]248
    P1241 括号序列
    P2858 [USACO06FEB]奶牛零食Treats for the Cows
    P2602 [ZJOI2010]数字计数&P1239 计数器&P4999 烦人的数学作业
    数位DP
    jquery生成元素注册事件无效,及事件委托的使用
    Jquery ajax运用执行顺序有误怎么解决
    html页面输入框input的美化
  • 原文地址:https://www.cnblogs.com/fate-/p/12266278.html
Copyright © 2011-2022 走看看