《ACM程序设计》书中题目 N

来源:互联网 发布:php微社区源码 编辑:程序博客网 时间:2024/05/16 19:55

题目简要:

描述
古典的Malidinesia的喜剧演员喜欢喜剧喜剧的悲剧。不幸的是,大多数古代戏剧是悲剧。因此,ACM的戏剧顾问已经决定将一些悲剧变成喜剧。显然,这项工作是非常困难的,因为戏剧的基本感觉必须保持完整,虽然所有的事情改变到他们的对立面。例如数字:如果悲剧中出现任何数字,它必须在被接受进喜剧之前被转换为它的反转形式。
反转数字是用阿拉伯数字书写的数字,但数字的顺序是相反的。第一个数字变为最后一位,反之亦然。例如,如果主人公在悲剧中有1245个草莓,他现在有5421个。注意,省略所有前导零。这意味着如果数字以零结束,则零通过反转而丢失(例如1200给出21)。还要注意,颠倒的数字从不具有任何尾随零。
ACM需要用反转数字计算。你的任务是添加两个相反的数字并输出它们的反转和。当然,结果不是唯一的,因为任何特定数字是几个数字的反转形式(例如,在反转之前21可以是12,120或1200)。因此,我们必须假设没有零通过反转而丢失(例如,假设原始数字是12)。

输入包括N种情况。输入的第一行只包含正整数N.然后遵循这些情况。每个案例正好由一条线和两个用空格分隔的正整数组成。这些是要添加的反转数字。

对于每种情况,只打印一行只包含一个整数 - 两个相反数字的反转和。省略输出中的任何前导零。

例如:

Sample Input



3
24 1
4358 754
305 794


Sample Output



34
1998
1

解题思路:
   看到这道题,我首先想到的是如何将输入和输出的数据倒序的问题。看到这道题目其实就是三个倒序放在一起,所以只需要解决一个问题就好了。
于是想到了以下这段代码:
  t=x%10;
  x=x/10;
  y=y*10+t;
有了这些,问题就基本解决了。
最后在写的过程中,还是出现了一个小疏忽。忘记给最终答案的初始值赋值为0,导致了一次wrong answer,改过之后,顺利通过。

附代码:
 
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,i,m,p,q;
cin>>n;
struct demo
{
int a,b,s,t,sum,answer;
}c[n];
for(i=0;i<n;i++)
{
c[i].s=0;
c[i].t=0;
c[i].answer=0;
cin>>c[i].a>>c[i].b;   
while(c[i].a!=0)
{
m=c[i].a%10;
c[i].a=c[i].a/10;
c[i].s=c[i].s*10+m;
}
while(c[i].b!=0)
{
p=c[i].b%10;
c[i].b=c[i].b/10;
c[i].t=c[i].t*10+p;
}
c[i].sum=c[i].s+c[i].t;
while(c[i].sum!=0)
{
q=c[i].sum%10;
c[i].sum=c[i].sum/10;
c[i].answer=c[i].answer*10+q;
}
}
    for(i=0;i<n;i++)
    {
    cout<<c[i].answer<<endl;
}
return 0;
}

解题感受:
  这是3月9号晚上的第二道题,快12点了,做出来很兴奋。其实我做这道题运气还是非常好的,主程序一次就过了,稍微注意一下细节就过了。
其实这道题最重要的就是倒序的处理,开心·····

1 0