• 大数加法~HDU 1002 A + B Problem II


    题目链接:

    http://acm.hdu.edu.cn/showproblem.php?pid=1002

    题意:

    数学题,A+B;

    思路,这个数非常大,普通加法一定会超时,所以用大数加法。大数加法的基本思路是模拟我们做加法的时候的进位思想,从最低位开始模拟,

    在我的代码里

    v -- 进位, tmp -- 当前位2个数的和,k -- 答案数组的下标。

    其中, tmp/10 可以得到要进的位数, 同理,tmp%10可以得到个位,就是答案数组对应的位

    下面是AC代码:

    #include <iostream>
    #include <cstdio>
    #include <string.h>
    
    using namespace std;
    const int MX = 1000+10;
    char a[MX], b[MX];
    int c[MX];
    
    int main()
    {
        int cas = 0;
        int T;
        scanf("%d", &T);
        while(T--)
        {
            memset(a, 0, sizeof(a));
            memset(b, 0, sizeof(b));
            memset(c, 0, sizeof(c));
            scanf("%s %s", &a, &b);
            int lena = strlen(a);
            int lenb = strlen(b);
            int tmp;
            int v = 0, k = 0;
            for(int i = lena-1, j = lenb-1;; --i, --j)
            {
                if(i < 0 && j < 0) break;
                if(i < 0) tmp = b[j]-'0'+v;
                else if(j < 0) tmp = a[i]-'0'+v;
                else tmp =(a[i]-'0')+(b[j]-'0')+v;
                c[k] = tmp % 10; //取个位
                v = tmp/10; //取要进的位
                if(((i == 0)&&(j <= 0) || (j == 0)&&(i <= 0)) && v != 0) c[++k] = v;
                k++;
            }
            printf("Case %d:
    ", ++cas);
            printf("%s + %s = ", a, b);
            for(int i = k-1; i >= 0; --i) printf("%d", c[i]);
            if(T) printf("
    
    ");
            else printf("
    ");
        }
    }
    View Code

    如有疑问,欢迎评论指出!

    化繁为简 大巧不工
  • 相关阅读:
    【面试题总结】第三篇
    Django 多账号登录
    Zabbix3.2 监控搭建
    2017.09.24校内训练
    2017.09.06校内训练
    tyvj P1001 第K极值
    洛谷P1020导弹拦截
    洛谷P1006传纸条
    2017.09.10校内训练
    hdu_1086 You can Solve a Geometry Problem too
  • 原文地址:https://www.cnblogs.com/mpeter/p/10384274.html
Copyright © 2020-2023  润新知