| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 763 人关注过本帖
标题:代码BUG,找不出是哪里出错了。。求大神指教
只看楼主 加入收藏
chuanglan
Rank: 2
等 级:论坛游民
威 望:2
帖 子:91
专家分:29
注 册:2012-8-14
收藏
得分:0 
所以为了降低时间复杂度,后面的while循环不能要了。。而是改在第二个循环中。。其实你应该早告诉我a[i]是在哪里开始溢出的,因为我找的就是这个溢出点。。不过,多谢啦。。这是我考虑太不全面了
2012-08-17 15:04
chuanglan
Rank: 2
等 级:论坛游民
威 望:2
帖 子:91
专家分:29
注 册:2012-8-14
收藏
得分:0 
对了。。为了降低空间复杂度。。我们可以省去第二个循环。。就像你说的重新整理一遍会更好
2012-08-17 15:12
chuanglan
Rank: 2
等 级:论坛游民
威 望:2
帖 子:91
专家分:29
注 册:2012-8-14
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<string.h>
int main()

 {
   char a[50]={'\0'},b[50]={'\0'},c[50]={'\0'};    // 为了避免使用元素时没有初值,所以全部赋为0
   char A[50],B[50];
   int i,j,Ret,T,N,LenA,LenB;
   scanf("%d",&T);
      for(N = 1; N <= T; N++)       //    多次测试,总共T次?
        {
           scanf("%s%s",a,b);        //  输入两个数据。、,以字符串的形式
           strcpy(A,a);
           strcpy(B,b);
           strrev(a);
           strrev(b);               //  将两个字符创倒置,方便计算
           printf("%-20s\n",a);
           printf("%-20s\n",b);
           LenA = strlen(a);
           LenB = strlen(b);         // 求出a,b的长度
           if(LenA > LenB)              //   如果a比b长
             {
               for(i=0; i<LenB; i++)           //  把b长度以前的数字相加
                 c[i] = a[i] + b[i]-'0';        // 相加后的数字赋给数组c
               for(; i<LenA; i++)                   // 将多出的部分照抄,下面大体一样
                 c[i] = a[i];
               for(i = 0; c[i] != 0;i++)
                {
                    Ret = c[i]-'0';
                    if(Ret > 9)
                      {
                        c[i] = Ret%10 + '0';
                        c[i+1] += Ret/10;
                      }
                }
            }
         else if(LenA < LenB)
           {
             for(i=0; i<LenA; i++)           //  把b长度以前的数字相加
                 c[i] = a[i] + b[i]-'0';        // 相加后的数字赋给数组c
             for(; i<LenB; i++)                   // 将多出的部分照抄,下面大体一样
                 c[i] = b[i];
             for(i = 0; c[i] != 0;i++)
                {
                    Ret = c[i]-'0';
                    if(Ret > 9)
                      {
                        c[i] = Ret%10 + '0';
                        c[i+1] += Ret/10;
                      }
                }
           }
      else
        {
          for(i=0; i<LenB; i++) 
             c[i] = a[i] + b[i]-'0';
          for(i = 0; c[i] != 0;i++)
                {
                    Ret = c[i]-'0';
                    if(Ret > 9)
                      {
                        c[i] = Ret%10 + '0';
                        c[i+1] += Ret/10;
                      }
                }
        }
     strrev(c);
     printf("case %d:\n",N); 
     printf("%s + %s = %s",A,B,c);
     } 
   getch();
   return 0; 

 }    
现在有个怪问题。。就是只有第一次是错误的。。。同样的数据在第二次测试时N=2时就是对的。。这是什么BUG?
2012-08-17 15:33
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
收藏
得分:0 
回复 13楼 chuanglan
我想,你把
               for(i = 0; c[i] != 0;i++)
                {
                    Ret = c[i]-'0';
                    if(Ret > 9)
                      {
                        c[i] = Ret%10 + '0';
                        c[i+1] += Ret/10;
                      }
                }
这段换成我写的那段就没有bug了吧,两段有一点差别,你还是有没考虑的地方
2012-08-18 01:19
chuanglan
Rank: 2
等 级:论坛游民
威 望:2
帖 子:91
专家分:29
注 册:2012-8-14
收藏
得分:0 
嗯。。。我觉得我的代码有点那个。。。因为只有第一次才出错。。如果有什么地方没有考虑完整。。那么第二次及以后都不会正确的。。事实却相反。。
那就看看你的代码为什么是全方面的吧。。
              int j=0;                                    //&&有进位的地方你没有考虑,直接全部赋值到c[]中然后统一考虑.
              while(c[j]!=0)               //因为我的全部成员的值是0,所以以此为终止循环的条件,
              {
                  if(c[j]-'0'>9)        // 这是c[j]需要处理的情况
                  {
                      c[j]=(c[j]-'0')%10 + '0';   //取个位
                      if(c[j+1]==0)      
             //这是当最高位进位的时候要赋值为'1',而不是我想当然的 +1,因为我的原本是0,加1便是笑脸, Soga问题在于这个if语句  ,终于全懂了
                          c[j+1]='1';
                      else
                        c[j+1]+=1;
                  }
                  j++;
              }
2012-08-18 08:55
快速回复:代码BUG,找不出是哪里出错了。。求大神指教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044034 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved