水题 第四站 HDU A + B Problem II

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xj13821328013/article/details/75047366

一道很简单的题目让我做得恶心无比,大数问题,不熟悉java,还是用C++写吧。显然需要用到字符串,然后再将字符串中的数字转化为整数类型进行加法运算。去年做类似题目的时候还只知其然不知其所以然,现在明白了为什么不能直接读入数组。
然而时隔一年也忘记了思路,加上当时没有总结过,只是仿照代码敲了一遍,收获实在甚小。
参考网上的思路,读入字符串,逐位进行-‘0’操作,存入数组,进行数组加法,记得进位操作和数组初始化为0,这样清晰的思路代码简直信手拈来,但是还是遇到了意料之中的WA,上代码分析

#include <iostream>
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <string.h>
using namespace std;

int main ()
{
    int n, i, cas=1;
    char str1[1010],str2[1010];
    int a[1010], b[1010],c[1010];
    scanf("%d",&n);
    int m=n;
    while(n--)
    {
        scanf("%s %s",str1,str2);
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(c,0,sizeof(c));
        int len=max(strlen(str1),strlen(str2));
        int j=len,k=len;
        for(i=strlen(str1)-1; i>=0; i--)
        {
            a[j--]=str1[i]-'0';
        }

        for(i=strlen(str2)-1; i>=0; i--)
        {
            b[k--]=str2[i]-'0';
        }

        for(i=len; i>=1; i--)
        {
            int ans=a[i]+b[i]+c[i];
            if(ans>=10)
            {
                c[i]=ans%10;
                c[i-1]=ans/10;
            }
            else
                c[i]=ans;
        }
        printf("Case %d:\n",cas++);
        printf("%s + %s = ",str1,str2);
        if(c[0])
            printf("%d",c[0]);
        for(i=1; i<=len; i++)
            printf("%d",c[i]);
        printf("\n");
        //printf("%d %d\n",m,cas);
        if(m!=cas-1)
            printf("\n");
    }
    return 0;
}

(1)刚开始将字符串转化为数组,忽略了不同位数问题,比如34+234存入数组应为034+234,这样才能进行对应位的加法,刚开始没注意到这个细节,想当然就存成340+234
(2)输出格式,最后一行输出不加空行,= =题目中有说吗?注意就是了= =

猜你喜欢

转载自blog.csdn.net/xj13821328013/article/details/75047366