c++求A+Bbig problem,大数相加c程序问题

来源:百度知道 编辑:UC知道 时间:2024/06/10 07:44:31
输入两个数计算和,并输出结果.
Input
输入以两个数为一组,有多组.数字大小不定,不小于10000000000000000
Output
输出两个数的和
Sample Input
2 3
4 5
Sample Output
5
9
#include<iostream.h>
#include <string.h>
#define N 500
int main()
{
char c1[N],c2[N],c3[N+1];
int i;
for( i=0;i<N;i++)
c1[i]=c2[i]=c3[i]=NULL;
c3[N]=NULL;
int len1,len2;

char temp,c;
while(cin>>c1>>c2)
{
len1=strlen(c1);
len2=strlen(c2);
temp= NULL;
c='0';
if(len1>len2)
{
while(len2)
{
temp=c1[len1-1]+c2[len2-1]+c-48;
if(temp-48>'9')
{
c='1';
c3[len1-1]=(temp-96)%10+48;
}
else
{

问题比较多,不知道你说本机上可以通过到底是怎么通过的。
1.你的程序结果不对,主要体现在第二轮以后的计算结果长度不对。这是由于你在总的循环(while(cin>>c1>>c2) 这一层)没有做充分的数据清理,c3每次都保留着上一次的结果,而每次加法又没给c3设置结尾的NULL,所以c3没有确定的结尾。如果后一次计算结果比前一次位数少,就会把前次计算结果带出来。
2.你的程序自己停不了。你给出的问题里没有明确说明结束的条件,这不是标准的ACM题的样子。按照惯例应该是输入两个数都是0表明结束,但这样的情况下你的程序停不了,要记住cin返回值是cin,不是数值,拿这个东西作while()的条件是没有意义的。不论如何你都得让自己的程序有终止条件,自己停不了的程序是不可能AC的。
3.你的程序用字符串记录长整数,这没错;但输入长整数也用字符串的方式,而且又没有把前面多余的0滤掉,这就不对了。比如输入0001 + 0001,你的结果是0002,这显然不对。给出的问题里没对这个功能作要求,但这是显然要做的。ACM的测试数据非常全面,很可能会测到这个功能。