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

来源:互联网 发布:linux限制ip访问次数 编辑:程序博客网 时间:2024/06/03 11:20


题目大意:

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


题目地址:

  POJ  1504 ZOJ  2001 UVA  713


题解:

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


#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[n]==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;}


0 0