您的位置:首页 > 理论基础 > 数据结构算法

《数据结构编程实验》 4.2.1Adding Reversed Numbers

2015-04-07 21:12 267 查看


题目大意:

  给出两个数,将他们的反向数相加后再反向输出。

题目地址:

  POJ  1504 ZOJ  2001[b] UVA  713[/b]

题解:

  纯模拟,水题一道,数据较大,需要高精度计算。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MaxLen=1010;
int read(int f[])
{
char s[MaxLen];
int len,i,n;
memset(f,0,MaxLen*sizeof(f));
scanf("%s",s);
n=strlen(s);
i=n-1;
len=1;
while (i>=0)
{
f[len]=s[i]-'0';
len++;
i--;
}
f[0]=len;
return 0;
}
int add(int x[],int y[],int z[])
{
int i,len,n,m;
memset(z,0,MaxLen*sizeof(z));
n=x[0];m=y[0];
for (i=1;i<=(n>m?n:m);i++)
{
z[i]=z[i]+x[i]+y[i];
if (z[i]>=10)
{
z[i+1]=z[i]/10;
z[i]=z[i]%10;
}
}
len=n>m?n:m;
while (z[len+1]!=0) len++;
z[0]=len;
return 0;
}
int write(int f[])
{
int i;
for (i=f[0];i>0;i--) printf("%d",f[i]);
printf("\n");
return 0;
}
int f(int a[])
{
int b[MaxLen],i,n;
memset(b,0,sizeof(b));
for (i=0;i<=a[0];i++) b[i]=a[i];
n=1;
while (b
==0) n++;
memset(a,0,MaxLen*sizeof(a));
a[0]=0;
i=b[0];
while (i>=n)
{
a[0]++;
a[a[0]]=b[i];
i--;
}
return 0;
}
int main()
{
int a[MaxLen],b[MaxLen],c[MaxLen];
int n;
scanf("%d",&n);
while (n--)
{
read(a);
read(b);
f(a);
f(b);
add(a,b,c);
f(c);
write(c);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息