SPOJ错误答案ADDREV

时间:2009-09-26 21:12:10

标签: c++ debugging

我的代码非常简单明了。我虽然提交了“错误答案”。我不知道为什么会这样!这是代码......

#include<iostream>
#include<string>
using namespace std;

void sum(string num)
{
  int i,len=num.length();
  int j=len-1;
  int carry=0;
  string answer;
  int s=0;
  for(i=0,j;i<len;i++,j--)
  {
    s = (num[i]-'0')+(num[j]-'0')+carry;
if (s>10&&j!=0)
{ 
      carry = s/10;
  s = s%10; 
    } 
else if (s>10&&j==0)
{ 
      carry=s/10; s=s%10; answer+=s+'0';answer+=carry+'0'; break;
    }   
answer+=s+'0';
  }
  int sz=answer.size();for(int j=sz-1;j>=0;j--) cout<<answer[j];
  }

  int main(int argc,char **argv)
  {
    int n;cin>>n;
    for(int i=0;i<n;i++)
  {
  string no;cin>>no;
  sum(no);cout<<endl;
  }
}

2 个答案:

答案 0 :(得分:0)

我没有分析您的代码,但这里有一些关于SPOJ的提示:

  1. 仔细阅读说明,看看是否遗漏了任何内容。
  2. 检查边缘情况,看看你的输出是否有意义。
  3. 小心空白。最后检查输出是否有无关的换行符/空格。

答案 1 :(得分:0)

#include<stdio.h>
#include<math.h>
int reverse(long long int n);
int main()
{
        int t;
        scanf("%d",&t);
        while(t--)
        {
                long long int m,n;
                scanf("%lld %lld",&m,&n);
                m = reverse(m) + reverse(n);
                n = reverse(m);
                printf("%lld\n",n);
        }
        return 0;
}
int reverse(long long int n)
{
        long long int i=0,y=0,x=n;
        while(x)
        {
                y++;
                x = x/10;
        }
        while(y)
        {
                i = i + (n%10)*pow(10,y-1);
                n = n/10;
                y--;
        }
        return i;
}

此代码被接受