逆序数相加
Problem code: ADDREV
问题描述:
The Antique Comedians of Malidinesia(不知道是什么东东,不会翻)比较倾向于戏剧。不幸的是,大多数古典剧(ancient plays)是悲剧。因此,ACM的戏剧顾问决定把一些悲剧美化成喜剧。 显然, 既要保证剧情的合理又要把所有的事情变成相对的是很困难的。比如数字:如果悲剧中出现数字,就要将他转化成它的逆序以便在戏剧中使用。
逆序数(Reversed number)就是一个数的各位的顺序相反的那个数。第一位变最后一位,反之亦然。例如,如果在悲剧中主角有1245个草莓,那他现在就有5421个了。注意,前导零是忽略的。也就是说,如果一个数以0结尾,那么逆序之后将丢失这些0(比如1200 转换之后就变成了21). 另外,逆序数末尾是不会有0的.
ACM 需要计算这些逆序数,你的任务是将两个逆序数相加并且将它们的和的逆序数输出。当然,结果并不唯一,因为任何 数字都是若干数字的逆序数(例:21 有可能是12, 120 或者 1200 的逆序). 所以我们在这里假设在转换的过程中没有丢失0(对于刚才的例子,假设原始数字就是12).
输入:
输入包含N组数据(大约10000)。第一行是正整数N。然后下面接着是每行一组的数据。每组数据包含用空格隔开的两个正整数。他们就是你将要处理的数。
输出:
每行一组数据,输出两个数的逆序数的和的逆序数。 忽略前导零。
示例:
示例输入:
3
24 1
4358 754
305 794
示例输出:
34
1998
1
AC代码-C#
![](/Images/OutliningIndicators/ContractedBlock.gif)
Code
/*
* Created by SharpDevelop.
* User: metav
* Date: 2008/10/30
* Time: 18:56
*
* KeyWord:ADDREV
* Abstract:两个数的逆序数相加后将结果再逆序输出
* Analysis: null
*/
using System;
namespace Sphere
{
public class Adding_Reversed_Numbers
{
public static void Main()
{
int n = int.Parse(Console.ReadLine());
while(n--!=0)
{
string s = Console.ReadLine();
string[] nums = s.Split(new char[]{' '});
DoPlus(nums[0].TrimEnd('0'),nums[1].TrimEnd('0'));
}
//Console.ReadKey();
}
private static void DoPlus(string a,string b)
{
char[] na = a.ToCharArray();
char[] nb = b.ToCharArray();
int res = 0,carry = 0;
int i,j;
for( i= 0,j = 0;i<na.Length||j<nb.Length;i++,j++)
{
res *= 10;
int t= 0;
if(i<na.Length&&j<nb.Length)
{
t = int.Parse(na[i].ToString())+int.Parse(nb[j].ToString());
}
if(i>=na.Length&&j<nb.Length)
{
t=int.Parse(nb[j].ToString());
}
if(i<na.Length&&j>=nb.Length)
{
t=int.Parse(na[i].ToString());
}
res += (t+carry)%10;
carry =(t+carry)/10;
}
if(carry != 0)
{
res*=10;
res+=1;
}
Console.WriteLine(res);
}
}
}