备战考研算法笔记(三)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 }
运行一下跟我结果一样 ,为什么我错了呢????
不过人家的代码的确写的思路清晰,一看就懂