例6    数字反转

题目描述

给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。

输入格式

一个整数 N

输出格式

一个整数,表示反转后的新数。

输入样例 #1

123

输出样例 #1

321

输入样例 #2

-380

输出样例 #2

-83

(1)编程思路。

将一个非负整数number各位上的数字依次分离出来,其操作步骤为:

1)分离出number的个位数,即number%10。

2)将number除以10,作为新的number,即新的number丢掉了个位数。

3)如果number等于0,分离完毕,结束。否则,转第1)步,继续显示。

例如,number=1234,number%10=4, number=1234/10=123,得到数字4;

number%10=3, number=123/10=12,得到数字3;

number%10=2, number=12/10=1,得到数字2;

number%10=1, number=1/10=0,得到数字1;结束。

由数字4、3、2、1如何得到整数4321呢?

4321=4*1000+3*100+2*10+1=4*103+3*102+2*10+1

右边的多项式可以采用秦九韶算法求解。

设要求解  P=4*103+3*102+2*10+1

可演变为  P=(((0*10+4)*10 +3)*10+2)*10+1。

这样,可令P初值为0,每给定一个数字a,执行 P=P*10+a 即可。

由数字4、3、2、1得到整数4321的过程描述为:

P=0  ,给出数字4,P= 0*10+4 =4;   之后数字3 , P=4*10+3= 43;

之后数字2,P= 43*10+2 =432;   最后数字1 , P=432*10+1= 4321。

将上述两个操作结合起来,一边分离出number的各位上的数字,一边将其拼到逆序数P上去,这样可将求number逆序数P的过程写成一个简单的循环。

P=0;

While (number!=0)  { p=p*10+number%10;   number=number/10;   }

(2)源程序。

#include <stdio.h>

int main()

{

int n,m,f;

scanf("%d",&n);

m=0; f=1;

if (n<0)

{

n=-n;

f=-1;

}

while (n!=0)

{

m=m*10+n%10;

n/=10;

}

m=f*m;

printf("%d\n",m);

return 0;

}

习题6

6-1  回文数的个数

题目描述

“回文”是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我”等。在数学中也有这样一类数字有这样的特征,称为回文数(palindrome number)。

设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。

例如,10到100之间的回文数有11,22,33,44,55,66,77,88,99共9个。

输入格式

两个整数a和b(10≤a≤b≤65535)。

输出格式

一个整数,表示整数a和b之间所有回文数的个数。

输入样例

10  100

输出样例

9

(1)编程思路。

一个正整数如果其逆序数与其相等,则它一定是一个回文数。按例6的方法编写一个函数int inverse(int n)求整数n的逆序数。

(2)源程序。

#include<stdio.h>

int inverse(int n)

{

int s=0;

while (n!=0)

{

s=s*10+n%10;

n/=10;

}

return s;

}

int main()

{

int a,b,cnt,i;

while(scanf("%d%d", &a,&b)!=EOF)

{

cnt=0;

for (i=a;i<=b;i++)

if (i==inverse(i)) cnt++;

printf("%d\n", cnt);

}

return 0;

}

6-2  回文数猜想

本题选自杭州电子科技大学OJ题库 (http://acm.hdu.edu.cn/showproblem.php?pid=1282)

Problem Description

一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数。任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其和不是回文数,则重复上述步骤,一直到获得回文数为止。例如:68变成154(68+86),再变成605(154+451),最后变成1111(605+506),而1111是回文数。于是有数学家提出一个猜想:不论开始是什么正整数,在经过有限次正序数和倒序数相加的步骤后,都会得到一个回文数。至今为止还不知道这个猜想是对还是错。现在请你编程序验证之。

Input

每行一个正整数。

特别说明:输入的数据保证中间结果小于2^31。

Output

对应每个输入,输出两行,一行是变换的次数,一行是变换的过程。

Sample Input

27228

37649

Sample Output

3

27228--->109500--->115401--->219912

2

37649--->132322--->355553

(1)编程思路。

同样编写一个函数int inverse(int n)求整数n的逆序数。

(2)源程序。

#include<stdio.h>

int inverse(int n)

{

int s=0;

while (n!=0)

{

s=s*10+n%10;

n/=10;

}

return s;

}

int main()

{

int m,cnt,t;

while(scanf("%d",&m)!=EOF)

{

cnt=0;

t=m;

while (t!=inverse(t))

{

cnt++;

t=t+inverse(t);

}

printf("%d\n",cnt);

printf("%d",m);

while (cnt--)

{

m=m+inverse(m);

printf("--->%d",m);

}

printf("\n");

}

return 0;

}

6-3  叛逆的小明

本题选自杭州电子科技大学OJ题库 (http://acm.hdu.edu.cn/showproblem.php?pid=4554)

Problem Description

叛逆期的小明什么都喜欢反着做,连看数字也是如此(负号除外),比如:小明会把1234它看成4321;把-1234看成-4321;把230看成032 (032=32);把-230看成-032(-032=-32)。

现在,小明做了一些a+b和a-b的题目(a, b为整数且不含前导0),如果给你这些题目正确的答案,你能猜出小明会做得到什么答案吗?

Input

输入第一行为一个正整数T(T<=10000),表示小明共做了T道题。

接下来T行,每行是两个整数x,y(-1000000<=x, y<=1000000), x表示a+b的正确答案,y表示a-b的正确答案。

输入保证合法,且不需考虑a或b是小数的情况。

Output

输出共T行,每行输出两个整数s t,之间用一个空格分开,其中s表示小明将得到的a+b答案,t表示小明将得到的a-b答案。

Sample Input

3

20 6

7 7

-100 -140

Sample Output

38 24

7 7

-19 -23

(1)编程思路。

由于输入的x和y是正确答案,即x=a+b ,y=a-b。 可求得 a=(x+y)/2,b=(x-y)/2。

分别求得a和b的逆序数c和d,这是小明的运算数,输出c+d和c-d即可。

(2)源程序。

#include<stdio.h>

int inverse(int n)

{

int s=0;

while (n!=0)

{

s=s*10+n%10;

n/=10;

}

return s;

}

int main()

{

int x,y,a,b,c,d,t;

scanf("%d", &t);

while(t--)

{

scanf("%d %d", &x, &y);

a = (x +y) / 2;

b = (x - y) / 2;

if (a < 0)

c = -1*inverse(-a);

else

c = inverse(a);

if (b < 0)

d = -1*inverse(-b);

else

d = inverse(b);

printf("%d %d\n", c + d, c - d);

}

return 0;

}

C语言程序设计100例之(6):数字反转的更多相关文章

  1. 黑马程序员——经典C语言程序设计100例

    1.数字排列 2.奖金分配问题 3.已知条件求解整数 4.输入日期判断第几天 5.输入整数进行排序 6.用*号显示字母C的图案 7.显示特殊图案 8.打印九九口诀 9.输出国际象棋棋盘 10.打印楼梯 ...

  2. C语言程序设计100例之(22):插入排序

    例22  插入排序 问题描述 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素或记录的任意序列,重新排列成一个以关键字递增(或递减)排列的有序序列. 排序的方法有很多,简单插入排序就是一 ...

  3. C语言程序设计100例之(9):生理周期

    例9    生理周期 问题描述 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为 23 天.28 天和33 天.每一个周期中有一天是高峰.在高峰这天,人会在相应的方面表现出色.例如 ...

  4. C语言程序设计100例之(4):水仙花数

    例4    水仙花数 题目描述 一个三位整数(100-999),若各位数的立方和等于该数自身,则称其为“水仙花数”(如:153=13+53+33),找出所有的这种数. 输入格式 没有输入 输出格式 若 ...

  5. C语言程序设计100例之(25):确定进制

    例25    确定进制 问题描述 6*9 = 42 对于十进制来说是错误的,但是对于13进制来说是正确的.即 6(13)* 9(13)= 42(13),因为,在十三进制中,42 = 4 * 13 + ...

  6. C语言程序设计100例之(11):求质数

    例11  求质数 问题描述 质数是指除了有1和自身作为约数外,不再有其他约数的数.比如:3.5.7是质数.而9不是质数,因为它还有约数3. 编写程序求给定区间中的所有质数. 输入格式 两个整数a和b, ...

  7. C语言程序设计100例之(23):数列求和

    例23  数列求和 问题描述 已知某数列前两项为2和3,其后继项根据前面最后两项的乘积,按下列规则生成: ① 若乘积为一位数,则该乘积即为数列的后继项: ② 若乘积为二位数,则该乘积的十位上的数字和个 ...

  8. C语言程序设计100例之(21):折半查找

    例21  折半查找 问题描述 顺序查找是一种最简单和最基本的检索方法.其基本思想是:从检索表的一端(如表中第一个记录或最后一个记录)开始,逐个进行记录的关键字和给定值的比较.若某个记录的关键字和给定值 ...

  9. C语言程序设计100例之(18):火柴棒等式

    例18   火柴棒等式 用n根火柴棍,可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棒拼出的整数(若该数非零,则最高位不能是0).用火柴棒拼数字0~9的拼法如图1所示. 图1  用 ...

随机推荐

  1. bugku color

    下载打开压缩包是七张图片,分别是七个颜色,使用stegsolve打开发现了异常. 七张图片拼起来是 make me tall,看来是要修改图片高度. 我们使用winhex打开图片并在十六进制中修改图片 ...

  2. 云上的芯脏病:奇怪的阿里云 RDS 数据库突发 CPU 近 100% 问题

    最近遇到了奇怪的阿里云 RDS 数据库突发 CPU 近 100% 问题,遇到了3次. 第一次是10月12日(周六)凌晨 3:24 负载极低的时候开始出现,早上发现后进行了主备切换,恢复了正常. 第二次 ...

  3. VirtualBox for Mac 6.0.14 开源免费虚拟机方案

    VirtualBox for mac是一款开源虚拟机软件,你可以利用该软件在Mac OS平台上运行Windows软件,即可以在一定程度上弥补Mac OS平台软件不足的劣势,玩家也可以获得Windows ...

  4. 马蜂窝 IM 移动端架构的从 0 到 1

    (马蜂窝技术原创内容,公众号 ID:mfwtech) 移动互联网技术改变了旅游的世界,这个领域过去沉重的信息分销成本被大大降低.用户与服务供应商之间.用户与用户之间的沟通路径逐渐打通,沟通的场景也在不 ...

  5. 【Java 基础】谈谈集合.List

    目录 1. ArrayList 1.1 ArrayList的构造 1.2 add方法 1.3 remove方法 1.4 查询方法 1.5 一些其他常用方法 1.6 ArrayList小结 2. Vec ...

  6. 后渗透神器Cobalt Strike的安装

    0x01 简介 Cobalt Strike集成了端口转发.扫描多模式端口监听Windows exe木马,生成Windows dll(动态链接库)木马,生成java木马,生成office宏病毒,生成木马 ...

  7. 『嗨威说』算法设计与分析 - 动态规划思想小结(HDU 4283 You Are the One)

    本文索引目录: 一.动态规划的基本思想 二.数字三角形.最大子段和(PTA)递归方程 三.一道区间动态规划题点拨升华动态规划思想 四.结对编程情况 一.动态规划的基本思想: 1.1 基本概念: 动态规 ...

  8. python问题:IndentationError:expected an indented block

    Python语言是一款对缩进非常敏感的语言,给很多初学者带来了困惑,即便是很有经验的Python程序员,也可能陷入陷阱当中.最常见的情况是tab和空格的混用会导致错误,或者缩进不对,而这是用肉眼无法分 ...

  9. 百万年薪python之路 -- 字典(dict)练习

    1.请将列表中的每个元素通过 "_" 链接起来. users = ['大黑哥','龚明阳',666,'渣渣辉'] users = ['大黑哥','龚明阳',666,'渣渣辉'] u ...

  10. 设计模式(二十三)Interpreter模式

    在Interpreter模式中,程序要解决的问题会被用非常简单的“迷你语言”表述出来,即用“迷你语言”编写的“迷你程序”把具体的问题表述出来.迷你程序是无法单独工作的,还需要用java语言编写一个负责 ...