您的位置:首页 > 其它

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

2013-07-20 16:05 176 查看
题目描述:
实现一个加法器,使其能够输出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的


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

#define N 1010

int main(void) {
char num1
,num2
;

int length1,length2,c,k,i;
while(scanf("%s%s",num1,num2) == 2) {
int a
= {0},b
= {0};
length1 = strlen(num1);
length2 = strlen(num2);
if(length1 < length2) {
k = length2;
}else {
k = length1;
}
c = k;
for(i=0; i<length1; k--,i++) {
a[k] = num1[length1 - 1 - i] - '0';
}
for(i=0,k=c; i<length2; k--,i++) {
b[k] = num2[length2 - 1 - i] - '0';
}
for(i=c; i>0; i--) {
a[i] += b[i];
if(a[i]>=10) {
a[i] -= 10;
a[i-1]++;
}
}
if(a[0] != 0) {
for(i=0; i<=c; i++) {
printf("%d",a[i]);
}
}else {
for(i=1; i<=c; i++) {
printf("%d",a[i]);
}
}
printf("\n");
}
return 0;
}



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

 不过人家的代码的确写的思路清晰,一看就懂
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: