• 题目1198:a+b-----没有AC掉,,,,,借鉴了别人的一份,还有carr&&(c[len] = carr)&&(++len);是什么意思?


    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]!='';i++)
              a[a1++]=str1[i]-'0';
              a[a1]=''; 
           for(j=0;str2[j]!='';j++)
              b[b1++]=str2[j]-'0';
              b[b1]='';
           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]='';
           int k=c1-1;
           while(c[k]==0) k--;
           for (k=k;k>=0;k--)
             printf("%d",c[k]);
           printf("
    ");
           
         }    
         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("
    ");
        }
        return 0;
    } 
    /*
    输出结果: 
    ---------------------
    2 6                                            思路: 1.由于数很大,必须用字符串存取 
    8                                                   2.注意a,b串是从大高位到低位存储,故数字的最低位在串的最高位        
    10000000000000000000 100000000000000000000000000000003.c串的输出时高位到低位的输出 
    10000000000010000000000000000000
    ---------------------
    */ 
  • 相关阅读:
    命令行添加删除tomcat服务
    访问不到主页index.jsp的原因是servlet-api.jar包有冲突,删除lib的servlet-api.jar,如果报错则添加Apache Tomcat下的 servlet-api.jar 即可。
    在浏览器控制台打印信息
    android访问权限(Android permission )大全
    导入android项目后不自动生成R.java文件的解决方法
    冒泡排序算法
    文本超出div部分,使用省略(...)表示
    sql 连接
    Sprin MVC 4.0中返回 json
    spring boot 配置过程
  • 原文地址:https://www.cnblogs.com/jianrenguo/p/6538630.html
Copyright © 2020-2023  润新知