时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:3059

解决:1678

题目描述:

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
来源:
2005年上海交通大学计算机研究生机试真题

思路:

数字反转可借助字符串来实现。(见代码1)

更好的办法是直接反转。(见代码2)

代码1:

#include <stdio.h>
#include <string.h> #define MAX 7 void fanzhuan(char *a, char *af)
{
int i;
int len = strlen(a);
for (i=0; i<len; i++)
af[i] = a[len-1-i];
for (i=len-1; i>=0; i--)
{
if (af[i] > '0')
{
af[i+1] = '\0';
break;
}
}
} void add(char *a, char *b, char *sum)
{
int lena=strlen(a), lenb=strlen(b);
int i;
char tmp; for (i=0; i<lena/2; i++)
{
tmp = a[i];
a[i] = a[lena-1-i];
a[lena-1-i] = tmp;
}
for (i=0; i<lenb/2; i++)
{
tmp = b[i];
b[i] = b[lenb-1-i];
b[lenb-1-i] = tmp;
} for (i=lena; i<MAX; i++)
a[i] = '0';
for (i=lenb; i<MAX; i++)
b[i] = '0';
for (i=0; i<MAX; i++)
sum[i] = '0';
/*
for (i=0; i<MAX; i++)
printf("%c", a[i]);
printf("\n");
for (i=0; i<MAX; i++)
printf("%c", b[i]);
printf("\n");
//printf("a[0] = %c\n", a[0]);
//printf("b[0] = %c\n", b[0]);
//printf("sum[0] = %c\n", sum[0]);
*/
for (i=0; i<MAX-1; i++)
{
sum[i] += a[i] - 48 + b[i] - 48;
//printf("a[i] = %c\n", a[i]);
//printf("b[i] = %c\n", b[i]);
//printf("sum[i] = %c\n", sum[i]);
if (sum[i] > '9')
{
sum[i+1] = ((sum[i]-48)/10) + 48;
sum[i] = ((sum[i]-48)%10) + 48;
}
}
//for (i=0; i<MAX; i++)
// printf("%c", sum[i]);
//printf("\n"); for (i=MAX-1; i>=0; i--)
{
if (sum[i] > '0')
{
sum[i+1] = '\0';
break;
}
}
if (i < 0)
sum[1] = '\0'; int lens = strlen(sum);
for (i=0; i<lens/2; i++)
{
tmp = sum[i];
sum[i] = sum[lens-1-i];
sum[lens-1-i] = tmp;
}
} int main(void)
{
char a[10000][MAX], b[10000][MAX];
char af[MAX], bf[MAX], sum[MAX], sumf[MAX], fsum[MAX];
int n;
int i; while (scanf("%d", &n) != EOF)
{
for (i=0; i<n; i++)
scanf("%s%s", a[i], b[i]); for (i=0; i<n; i++)
{
fanzhuan(a[i], af);
//printf("af = %s\n", af);
fanzhuan(b[i], bf);
//printf("bf = %s\n", bf);
add(a[i], b[i], sum);
//printf("sum = %s\n", sum);
fanzhuan(sum, sumf);
//printf("sumf = %s\n", sumf);
add(af, bf, fsum);
//printf("fsum = %s\n", fsum);
if (strcmp(fsum, sumf) == 0)
printf("%s\n", sum);
else
printf("NO\n");
}
} return 0;
}
/**************************************************************
Problem: 1089
User: liangrx06
Language: C
Result: Accepted
Time:0 ms
Memory:976 kb
****************************************************************/

代码2:

#include <stdio.h>
#include <string.h> int fz(int a)
{
int n = 0;
while (a)
{
n = n*10 + a%10;
a /= 10;
}
return n;
} int main(void)
{
int n, i;
int a, b; scanf("%d", &n);
for (i=0; i<n; i++)
{
scanf("%d%d", &a, &b);
if (fz(a)+fz(b) == fz(a+b))
printf("%d\n", a+b);
else
printf("NO\n");
} return 0;
}
/**************************************************************
Problem: 1089
User: liangrx06
Language: C++
Result: Accepted
Time:0 ms
Memory:1020 kb
****************************************************************/

九度OJ 1089:数字反转 (数字反转)的更多相关文章

  1. 九度oj 题目1349:数字在排序数组中出现的次数

    题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数组的大小.1<=n <= 10^6. 第二行有n个整数,表示数组元素,每个元素均 ...

  2. 九度oj 题目1051:数字阶梯求和

    题目描述: 给定a和n,计算a+aa+aaa+a...a(n个a)的和. 输入: 测试数据有多组,输入a,n(1<=a<=9,1<=n<=100). 输出: 对于每组输入,请输 ...

  3. 九度OJ,题目1089:数字反转

    题目描述: 12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,现在又任意两个正整数,问他们两个数反转的和是否等于两个数的和的反转. 输入: 第一行一个正整数表示测试数据的个数n. ...

  4. 【九度OJ】题目1474:矩阵幂 解题报告

    [九度OJ]题目1474:矩阵幂 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1474 题目描述: 给定一个n*n的矩阵,求该矩阵的 ...

  5. 九度OJ 1371 最小的K个数 -- 堆排序

    题目地址:http://ac.jobdu.com/problem.php?pid=1371 题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4 ...

  6. 九度OJ 题目1384:二维数组中的查找

    /********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...

  7. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

  8. 九度oj题目1009:二叉搜索树

    题目描述: 判断两序列是否为同一二叉搜索树序列 输入:                        开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...

  9. 【九度OJ】题目1124:Digital Roots 解题报告

    [九度OJ]题目1124:Digital Roots 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1124 题目描述: T ...

随机推荐

  1. 【NOIP2016练习】T3 质数 (分块)

    题意:共有N盏灯,标号为1到N,有M个标有不同质数的开关,开关可以控制所有标号为其标号倍数的灯,按一次开关,所有其控制的灭着的灯都点亮,所有其控制的亮着的灯将熄灭.现在,宿管可以无限的按所有开关,所有 ...

  2. css3 实现居中的9中方法

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  3. HDU 6218 (线段树+set)

    HDU 6218 Bridge Problem : 给一个2×n的矩阵,一开始矩阵所有相邻点之间有一条边.有其.个询问,每次给出两个相邻的点的坐标,将其中的边删除或者添加,问如此操作之后整张图的割边数 ...

  4. luogu 3708 koishi的数学题 递推 线性筛

    题目链接 题意 输入一个整数\(n\)\((n\leq 1e6)\),设\(f(x)=\sum_{i=1}^n x\mod i\),你需要输出\(f(1),f(2)...,f(n)\). 输入输出格式 ...

  5. hdu 1565&hdu 1569(网络流--最小点权值覆盖)

    方格取数(1) Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  6. AC日记——2条不相交的路径 51nod 1076

    1076 2条不相交的路径 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 给出一个无向图G的顶点V和边E.进行Q次查询,查询从G的某个顶点V[s] ...

  7. Android 防护扫盲篇

    一,已知防护策略 1.不可或缺的混淆 Java 是一种跨平台.解释型语言,Java 源代码编译成的class文件中有大量包含语义的变量名.方法名的信息,很容易被反编译为Java 源代码.为了防止这种现 ...

  8. Arduino可穿戴教程保存源文件与打开已经存在的源文件

    Arduino可穿戴教程保存源文件与打开已经存在的源文件 Arduino IDE保存源文件 保存源文件可以通过“文件”菜单的“保存”或者快捷键Ctrl+S完成,如图2.28所示.   图2.28  保 ...

  9. Codeforces Round #317 [AimFund Thanks-Round] (Div. 2) Minimization dp

    原题链接:http://codeforces.com/contest/572/problem/D 题意 给你个数组A和n,k,问你排列A后,下面的最小值是多少. 题解 先排个序,要填充像1,1+k,1 ...

  10. Java Scanner类中next()和nextLine()方法的区别

    今天在练习中遇到了调用Scanner类中的nextLine()输入字符串自动跳过的问题,在博客上看了两篇解答,原来是nextLine()误认了前面next()输入时的Enter,但还是想了一会儿才弄清 ...