备战考研算法笔记(三)a+b

题目描述:

实现一个加法器,使其能够输出a+b的值。

输入:

输入包括两个数a和b,其中a和b的位数不超过1000位。

输出:

可能有多组测试数据,对于每组数据,
输出a+b的值。

样例输入:
2 6
10000000000000000000 10000000000000000000000000000000
样例输出:
8
10000000000010000000000000000000


这是我的代码
// OJ.cpp : 定义控制台应用程序的入口点。
//

#include "stdio.h"
#include "StdAfx.h"
#include <string.h>

int main()
{
    char a[1010];
    char b[1010];
    char result[1000]={0};
    while(scanf("%s%s",a,b)!=EOF)
  {
      int m= strlen(a);
      int n=strlen(b);
      char result[1010]={0};
      //printf("%s %d\n",a,m);
    //printf("%s %d\n",b,n);

    if(m>n)
     {
      int i=1;
      for(i;i<=n;i++)
      {
          result[m-i]+=a[m-i]+b[n-i]-48;
          if(result[m-i]>57)
          {
              result[m-i]-=10;
              result[m-i-1]+=1;
          }
      }
      i=0;
      for(i;i<m-n;i++)
      {
       result[i]=a[i]+result[i];
      }
      printf("%s\n",result);
  }

  else if(m<n)
  {
        int i=1;
      for(i;i<=m;i++)
      {
          result[n-i]+=a[m-i]+b[n-i]-48;
          if(result[n-i]>57)
          {
              result[n-i]-=10;
              result[n-i-1]+=1;
          }
      }
      i=0;
      for(i;i<n-m;i++)
      {
       result[i]=b[i]+result[i];
      }
      printf("%s\n",result);
  }

  else if(m==n)
  {
      int i=1;
      for(i;i<=m;i++)
      {
          result[n-i]+=a[m-i]+b[n-i]-48;
          if(result[n-i]>57)
          {
              if(i==n)
              {
                  result[n-i]-=10;
                  printf("1");
              }
              else
              {
                  result[n-i]-=10;
                  result[n-i-1]+=1;
              }
          }
       
      }
      printf("%s\n",result);
      }

    }
    
    return 0;
}

 

可是没AC
这是找的已经AC的
 1 #include "StdAfx.h"
 2 #include<stdio.h>
 3 #include<string.h>
 4 
 5 #define N 1010
 6 
 7 int main(void) {
 8         char num1[N],num2[N];
 9         
10         int length1,length2,c,k,i;
11         while(scanf("%s%s",num1,num2) == 2) {
12                 int a[N] = {0},b[N] = {0};
13                 length1 = strlen(num1);
14                 length2 = strlen(num2);
15                 if(length1 < length2) {
16                         k = length2;
17                 }else {
18                         k = length1;
19                 }
20                 c = k;
21                 for(i=0; i<length1; k--,i++) {
22                         a[k] = num1[length1 - 1 - i] - '0';
23                 }
24                 for(i=0,k=c; i<length2; k--,i++) {
25                         b[k] = num2[length2 - 1 - i] - '0';
26                 }
27                 for(i=c; i>0; i--) {
28                         a[i] += b[i];
29                         if(a[i]>=10) {
30                                 a[i] -= 10;
31                                 a[i-1]++;
32                         }
33                 }
34                 if(a[0] != 0) {
35                         for(i=0; i<=c; i++) {
36                                 printf("%d",a[i]);
37                         }
38                 }else {
39                         for(i=1; i<=c; i++) {
40                                 printf("%d",a[i]);
41                         }
42                 }
43                 printf("\n");
44         }
45         return 0;
46 }

运行一下跟我结果一样 ,为什么我错了呢????

 不过人家的代码的确写的思路清晰,一看就懂
posted @ 2013-07-20 16:05  Joilee  阅读(303)  评论(0编辑  收藏  举报