| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
求大神帮忙!!!为什测试数据过了,但是有些数据(比如5,6,7)结果有问题求神帮助,谢谢~~~~~
思路:使用数组模拟加法,有详细注释。
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#define MAXN 200
using namespace std;
char a[MAXN],b[MAXN],c[MAXN]; //存放三个需要相加的因子
char s[MAXN]; //存放三个数相加的和
void func()
{
int i,j,m;
//循环结束时sum 就是A99的结果了。
for(i=3; i<100; i++)
{
m = 0;
//模拟数组相加
for(j=0; j<MAXN; j++)
{
m = ((a[j]-'0') + (b[j]-'0') + (c[j]-'0') + m);
s[j] = (m%10+'0');
m /= 10;
}
//把b赋给c,把a赋值给b,把sum 赋值给a,准备下一轮的递归加法
strcpy(c,b);
strcpy(b,a);
strcpy(a,s);
}
//逆序找到s中第一个不为‘0’的字符、
for(i=MAXN-1; i>0; i--)
if(s[i] != '0')
{
j = i;
break;
}
//输出其余的字符,即结果
for(i=j; i>=0; i--)
printf("%c",s[i]);
printf("\n");
}
int main()
{
char a0[MAXN],a1[MAXN],a2[MAXN];
int i,j;
while(scanf("%s%s%s",a0,a1,a2) != EOF)
{
//如果三个0,那么输出0
if(a0[0] == '0' && a1[0] == '0' && a2[0] == '0')
{
cout << '0' << endl;
continue;
}
//对所有的数组"归零"
memset(a,'0',sizeof(a));
memset(b,'0',sizeof(b));
memset(c,'0',sizeof(c));
memset(s,'0',sizeof(s));
//把a0,a1,a2,分别存放在a,b,c中,但是要逆序存放,
//这样在使用数组模拟相加的时候变得简单
int len0 = strlen(a0);
int len1 = strlen(a1);
int len2 = strlen(a2);
for(j=0,i=len0-1;i>=0; i--) a[j++] = a0[i];
for(j=0,i=len1-1;i>=0; i--) b[j++] = a1[i];
for(j=0,i=len2-1;i>=0; i--) c[j++] = a2[i];
func();
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator