题目1198:a+b-----没有AC掉,,,,,借鉴了别人的一份

Posted 贱人郭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题目1198:a+b-----没有AC掉,,,,,借鉴了别人的一份相关的知识,希望对你有一定的参考价值。

WA:在屏幕上可以出现正确的结果,不知为何不能AC

#include<stdio.h>
#include<stdlib.h>
#include<cstring>
int main()
{ 
     char str1[1001],str2[1001];
    
     while(scanf("%s %s",str1,str2)!=EOF)
     {
       int a[1001],a1=0,b[1001],b1=0,c[1001],c1=0;
       int i,j;
       for (i=0;str1[i]!=\0;i++)
          a[a1++]=str1[i]-0;
          a[a1]=\0; 
       for(j=0;str2[j]!=\0;j++)
          b[b1++]=str2[j]-0;
          b[b1]=\0;
       int t=0;//代表进位 
       for (i=a1-1,j=b1-1;i>=0&&j>=0;i--,j--)
           {
                 c[c1++]=(a[i]+b[j]+t)%10;
                 t=(a[i]+b[j]+t)/10; 
           }
     int p;
       if (i>=0) //证明a数组有剩余
       {
           p=t;
           for (i=i;i>=0;i--)
             {
                 c[c1++]=(a[i]+p)%10;
                 p=(a[i]+p)/10; 
             }
       } 
       if (j>=0)  //证明b数组有剩余
       {
         p=t;
           for (j=j;j>=0;j--)
             {
                 c[c1++]=(b[j]+p)%10;
                 p=(b[j]+p)/10; 
             }
       } 
       c[c1++]=p;
       c[c1]=\0;
       int k=c1-1;
       while(c[k]==0) k--;
       for (k=k;k>=0;k--)
         printf("%d",c[k]);
       printf("\n");
       
     }    
     return 0;
      
}

大神的AC代码:

/*
    时间:2014.1.16.22.00
    目的:大数求和 
*/
#include <stdio.h>
#include <string.h>

char a[1001],b[1001];
int c[1001];

int main()
{
    int carr,len_a,len_b,i,j,temp,len;
    while(~scanf("%s %s", a, b))
    {
        carr = len =0;
        len_a = strlen(a);
        len_b = strlen(b);
        for(i = len_a - 1,j = len_b - 1;i >= 0 && j >= 0;i--, --j)
        {
            temp = a[i] - 0 + b[j] - 0 + carr;
            c[len] = temp % 10;
            carr = temp / 10;
            len++;
        }  
        while(i >= 0)
        {
            temp = carr + a[i] - 0;
            c[len] = temp % 10;
            carr = temp / 10;
            i--;
            len++;
        }
    //    carr&&(c[len] = carr)&&(++len);此处我重复了一次 导致WA  因为当输出8 4 时  输出为112,多输出了一个1 
        while(j >= 0)
        {
            temp = carr + b[j] - 0;
            c[len] = temp % 10;
            carr = temp / 10;
            j--;
            len++;
        }
        carr&&(c[len] = carr)&&(++len);
        for(--len;len>=0;--len)
        printf("%d", c[len]);
        printf("\n");
    }
    return 0;
} 
/*
输出结果: 
---------------------
2 6                                            思路: 1.由于数很大,必须用字符串存取 
8                                                   2.注意a,b串是从大高位到低位存储,故数字的最低位在串的最高位        
10000000000000000000 100000000000000000000000000000003.c串的输出时高位到低位的输出 
10000000000010000000000000000000
---------------------
*/ 

 

以上是关于题目1198:a+b-----没有AC掉,,,,,借鉴了别人的一份的主要内容,如果未能解决你的问题,请参考以下文章

AC日记——最大数 洛谷 P1198 [JSOI2008]

tyvj 1198 矩阵连乘——区间dp

tyvj 1198 矩阵连乘——区间dp

题目1013:开门人和关门人----没有AC掉

CF1198BWelfare State

1198 国王游戏