1402 - 数字反转

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,现在又任意两个正整数,问他们两个数反转的和是否等于两个数的和的反转。

题目输入

第一行一个正整数表示测试数据的个数n。

只有n行,每行两个正整数a和b(0<a,b<=10000)。

题目输出

如果满足题目的要求输出a+b的值,否则输出NO。

输入/输出样例

输入格式

2
12 34
99 1

输出格式

46
NO

C语言解答

#include <stdio.h>

int travl(int x)
{
	int s=0;
	while(x!=0)
	{
		s=s*10+x%10;
		x=x/10;
	}
	return s;
}
int main(void)
{
	int a,b,n;
	int s;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d%d",&a,&b);
		s=a+b;
		a = travl(a);
		b = travl(b);
		s = travl(s);
		if(s==(a+b))
			printf("%d\n",travl(s));
		else
			printf("NO\n");
	}
	return 0;
}

C++解答

#include <stdio.h>

int ReverseNumber(int num){
	int revverseNumber = 0;
	while(num){
		revverseNumber = revverseNumber*10 + num%10;
		num /= 10;
	}
	return revverseNumber;
}

int main(){
#ifndef ONLINE_JUDGE
	freopen("in", "r", stdin);
#endif

	int nCase;
	scanf("%d", &nCase);
	while(nCase--){
		int a, b;
		scanf("%d%d", &a, &b);
		if(ReverseNumber(a+b)==(ReverseNumber(a)+ReverseNumber(b))){
			printf("%d\n", a+b);
		}else{
			puts("NO");
		}
	}

	return 0;
}

Java解答

import java.util.*;

public class Main {
	public static int inc(int k)
	{
		char p[]=new char[10];
		int i=0,r=0,u=1;
		for(;k>0;i++)
		{
			p[i]=(char) (k%10+'0');
			k/=10;
		}
		for(i--;i>=0;i--)
		{
			r+=(p[i]-'0')*u;
			u*=10;
		}
		return r;
	}
	public static void main(String[] args) {
		Scanner cin = new Scanner(System.in);
		int a,b,t,n;
		while(cin.hasNext())
		{
			n=cin.nextInt();
			if(n==0)
				break;
			for(int i=0;i<n;i++)
			{
				a=cin.nextInt();
				b=cin.nextInt();
				if(inc(a+b)==(inc(a)+inc(b)))
					System.out.println(a+b);
				else
					System.out.println("NO");
			}
		}
	}
}