zoukankan      html  css  js  c++  java
  • 51nod 1005 大数加法

    基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
     收藏
     关注
    给出2个大整数A,B,计算A+B的结果。
     
    Input
    第1行:大数A
    第2行:大数B
    (A,B的长度 <= 10000 需注意:A B有可能为负数)
    Output
    输出A + B
    Input示例
    68932147586
    468711654886
    Output示例
    537643802472
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    char s1[10010],s2[10010],ss1[10010],ss2[10010];
    int len1,len2,a[10010],b[10010],c[10010];
    bool f1,f2;
    void add(int *k1,int *k2)
    {
        c[0]=max(k1[0],k2[0]);
        for(int i=1;i<=c[0];i++)
        {
            c[i+1]=(k1[i]+k2[i]+c[i])/10;
            c[i]=(c[i]+k1[i]+k2[i])%10;
        }
        if(c[c[0]+1]) c[0]++;
        for(int i=c[0];i;i--) printf("%d",c[i]); 
    }
    void sub(int *k1,int *k2)
    {
        c[0]=k1[0];int x=0;
        for(int i=1;i<=c[0];i++)
        {
            if(k1[i]<k2[i])
            {
                k1[i]+=10;
                k1[i+1]--;
            }
            c[i]=k1[i]-k2[i];
        }
        while(!c[c[0]]&&c[0]>1) c[0]--;
        for(int i=c[0];i;i--) printf("%d",c[i]);
    }
    int main()
    {
        scanf("%s",s1);
        scanf("%s",s2);
        len1=strlen(s1);
        len2=strlen(s2);
        int i=0,j=0;
        if(s1[i]=='-') f1=true,i++;
        if(s2[j]=='-') f2=true,j++;
        int x1=0,y1=0;
        for(int x=i;x<len1;x++) ss1[x1++]=s1[x];
        for(int y=j;y<len2;y++) ss2[y1++]=s2[y];
        int x2=0,y2=0;
        for(int x=len1-1;x>=i;x--)
         a[++x2]=s1[x]-'0';
        for(int y=len2-1;y>=j;y--)
         b[++y2]=s2[y]-'0';
        a[0]=x2;b[0]=y2;
        if(f1==f2)
        {
            if(f1) putchar('-');
            add(a,b);
        }
        else if(f1)
        {
            if(strlen(ss1)==strlen(ss2)&&strcmp(ss1,ss2)>0||strlen(ss1)>strlen(ss2))  { putchar('-'); sub(a,b);}
            else sub(b,a);
        }
        else
        {
            if(strlen(ss1)==strlen(ss2)&&strcmp(ss1,ss2)>=0||strlen(ss1)>strlen(ss2)) sub(a,b);
            else { putchar('-'); sub(b,a); }
        }
    }

    错误1:

    加法中:c[i]=(c[i]+k1[i]+k2[i])%10;

    写成 c[i]+=(k1[i]+k2[i])%10;

    可能会使c[i]=10

    错误2:

    加法中

    c[i+1]=(k1[i]+k2[i]+c[i])/10;

    c[i]=(c[i]+k1[i]+k2[i])%10;

    顺序颠倒

    错误3:

    减法比较大小直接写strcmp(ss1,ss2)>0,错误

    因为strcmp的比较原则是逐位比较,所以要先判断长度

  • 相关阅读:
    python基础总结二
    HTTP和HTTPS的区别
    通过HTTP请求响应过程了解HTTP协议
    稳定性测试+易用性测试
    容错测试点
    功能测试思考点
    功能测试-UI测试思考点
    字符编码-11
    字典+再识函数-8
    web API的概念
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/6625021.html
Copyright © 2011-2022 走看看