zoukankan      html  css  js  c++  java
  • P1601 A+B Problem(高精)

    原题链接 https://www.luogu.org/problemnew/show/P1601

    这个题提示的很清楚,并非简单的A+B,单纯的long  long型也不行(不要被样例所迷惑)。因为long long型最大是2的63次方-1,而这个题明确说明了两个加数a和b在10的500次方范围内,也就意味着有501位数字,远远的超出了long long的范围,这时候我们就要用到高精度运算了。简单的思路是这样的:将两个加数a和b看作是两个字符串,将每一位存入字符数字中,因为数组可以开得很大,501位数字就不在话下啦。然后再将字符数组里的数转化成int型的并按从个位到最高位的顺序存在另一个数组里在进行相加,最后再倒着输出,那么这个题就完美解决了,废话少说,上代码!

    #include<iostream>
    #include<cstdio>
    #include<cstring>                   //求长度lena,lenb,lenc所要用到的头文件
    using namespace std;
    int a[501],b[501],c[501];          //初始化
    int main()
    {
    char a1[501],b1[501];           
    int lena,lenb,lenc,i,x;              
    scanf("%s",a1);                        //输入字符串a1,b1
    scanf("%s",b1);
    lena=strlen(a1);                        //求字符串a1和b1的长度
    lenb=strlen(b1);
    for(i=0;i<=lena-1;i++)           
    a[lena-i]=a1[i]-48;                      //将字符数组a1里的数转化为int型的,并倒存在数组a里面,方法是减去0的ASCII码48
    for(i=0;i<=lenb-1;i++) 
    b[lenb-i]=b1[i]-48;
    lenc=1;
    x=0;                                          //x表示所要进位的数
    while(lenc<=lena||lenc<=lenb)            //lenc的长度要恒小于等于lena或lenb,因为a和b的长度可能不相等
    {
    c[lenc]=a[lenc]+b[lenc]+x;                 //数组c来存放对应位的a+b的和,别忘加上上一位的进位的数  
    x=c[lenc]/10;                                     //x表示所要进位的数,如果不需要进位则x=0
    c[lenc]%=10;                  
    lenc++; 
    }
    c[lenc]=x;                                          //将x进到下一位
    if(c[lenc]==0)                                    //处理最高位,去掉前面的0
    lenc--;
    for(i=lenc;i>=1;i--)                              //倒着输出
    cout<<c[i];
    cout<<endl;
    return 0;
    }

  • 相关阅读:
    (转载)openwrt nginx
    *** 竞赛中的各种低级错误,及编程常见错误小结 ***
    信息学奥赛辅导经验谈 & 问题教学法中的学生思维能力培养
    数学&数论的一些题
    信息学竞赛中的一些经典思维 (题)
    从权值线段树到主席树
    浅谈莫队算法
    CSP-S 2019提高组训练 服务器需求
    NOIP2019 PJ 对称二叉树
    NOIP2017 PJ 跳房子 —— 单调队列优化DP
  • 原文地址:https://www.cnblogs.com/xcg123/p/10464390.html
Copyright © 2011-2022 走看看