您的位置:首页 > 其它

1002—A + B Problem II(高精度)

2012-07-10 22:29 162 查看
第一次正式开始编程之路,就拿这道题来说,对于许多神牛来讲,简直就是小case,然而,我却被这道题目宰了好长时间,提交了好多次都不成功,貌似有15次了,当时真想放弃了,

哎,小女出入编程之路,怎么可以这么容易被打败呢。于是乎,继续呗。。。


这道题目,我初看时,以为很简单,但是提交几次都失败后,才发现没想象的简单,需要用到高精度。还有神马前导不能为0,要用到数组来存储整数,数组中的每个元素都对应着大整数的每一位,按顺序排列。后来,了解了大整数相加的算法思想,在重新排了一次,变成格式错误,我改了好多,依旧presentation error。。。

纠结中……幸亏大神提醒,话说,题目要求每两个case之间留有一个空白行,但结尾不需要,结尾只要一个换行就可以了。。。于是乎。。。

在此,把代码展示下,留个纪念+教训+也是我正式踏上编程之路的开始

题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1002

我的代码:

#include <iostream>
using namespace std;
#include <string.h>
#include<string>
#define MAX_LEN 1001
int an1[MAX_LEN+10];
int an2[MAX_LEN+10];
char szLine1[MAX_LEN+10];
char szLine2[MAX_LEN+10];
int main()
{int t;
string szLine1,szLine2;
cin>>t;
for(int k=1;k<=t;k++)
{ cin>>szLine1>>szLine2;
memset( an1, 0, sizeof(an1));
memset( an2, 0, sizeof(an2));
int i, j;
int nLen1 =  szLine1.size();
for( j = 0, i = nLen1 - 1;i >= 0 ; i --)
an1[j++] = szLine1[i] - '0';
int nLen2 = szLine2.size();
for( j = 0, i = nLen2 - 1;i >= 0 ; i --)
an2[j++] = szLine2[i] - '0';
for( i = 0;i < MAX_LEN ; i ++ )
{ an1[i] += an2[i];
if( an1[i] >= 10 )
{
an1[i] -= 10;
an1[i+1] ++;
}
}
for( i = MAX_LEN; (i >= 0) && (an1[i] == 0); i -- ) ;
if(i>=0)
{cout<< "Case "<<k<<":"<<endl;
cout<<szLine1<<" + "<<szLine2<<" = ";
for( ; i >= 0; i--)
cout<<an1[i];
if(k!=t)
{cout<<"\n"<<endl;}
else cout<<endl;
}
else
{cout<< "Case "<<k<<":"<<endl;
cout<<szLine1<<" + "<<szLine2<<" = ";
cout<<"0";
if(k!=t)
{cout<<"\n"<<endl;}
else cout<<endl;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: