《数据结构编程实验》 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;
}
相关文章推荐
- 4.2.1 B - Adding Reversed Numbers(高精度运算)
- B - Adding Reversed Numbers(4.2.1)
- B - Adding Reversed Numbers(4.2.1)
- (数组的应用二:高精度运算4.2.1)POJ 1504 Adding Reversed Numbers(将一个数取反)
- POJ-1504 Adding Reversed Numbers-逆序数相加
- POJ 1504 Adding Reversed Numbers(水~)
- 2018_1_27_Adding Reversed Numbers_大数不熟的来做
- zoj 2001 Adding Reversed Numbers
- Adding Reversed Numbers(关于pow函数出错)
- zoj_2001 Adding Reversed Numbers
- poj 1504 Adding Reversed Numbers
- Adding Reversed Numbers(zoj 2001)
- ZOJ 2001 Adding Reversed Numbers
- 大数问题 ZOJ Problem Set - 2001 Adding Reversed Numbers
- poj 1504 Adding Reversed Numbers(简单字符串的处理)
- POJ 1504,ZOJ 2001,UVA 713, Adding Reversed Numbers,错误,已找到错误
- poj1504 Adding Reversed Numbers
- zoj 2001 Adding Reversed Numbers
- POJ1504 Adding Reversed Numbers
- zoj 2001 Adding Reversed Numbers