码迷,mamicode.com
首页 > 其他好文 > 详细

大数加法 (A + B Problem II)

时间:2018-08-07 20:26:16      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:需要   ret   syn   turn   应该   space   bsp   ==   string   

现在的题目,感觉大数加法用的还是很少了,但还是在这里介绍一道最基础的题目。
题目:hdu 1002 (http://acm.hdu.edu.cn/showproblem.php?pid=1002)
解法:大数加法
注意:需要注意的是,应该与大数乘法连起来一起看,你会发现它们之间进位的关系,加法最多只会进位1,但是乘法就会进位大于1。这是它们之间的区别
代码:



 

 

 

 

 

 

 

 

 

 

纯净版的无添加原生代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    //freopen("in.txt","r",stdin);
    char s1[1000]; char s2[1000];
    int a[1000] = {0}; int b[1000] = {0}; int sum[1000] = {0};
    cin >> s1 >> s2;
    int lenA = strlen(s1) - 1;
    int lenB = strlen(s2) - 1;
    int k = 0;
    int maxx = max(lenA,lenB);

    for(int i=lenA;i>=0;i--)  //两个for循环,将数组的高低位置反
        a[k++] = s1[i] - 0;
    k = 0;
    for(int i=lenB;i>=0;i--)
        b[k++] = s2[i] - 0;

    int carry = 0;            //carry表示进位标识符
    for(int i=0;i<=maxx;i++)
    {
        int tmp1 = a[i] + b[i] +carry;
        sum[i] = tmp1%10;
        if(tmp1 >=10)        //如果相加大于10,表示有进位
            carry = 1;
        else
            carry = 0;
    }
    if(carry == 1) printf("1");    //如果最后,A,B的最高为相加有进位的话,那么可以单独输出
    for(int i=maxx;i>=0;i--)
        printf("%d",sum[i]);
    return 0;
}

 

大数加法 (A + B Problem II)

标签:需要   ret   syn   turn   应该   space   bsp   ==   string   

原文地址:https://www.cnblogs.com/myxdashuaige/p/9438652.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!