C语言程序设计100例之(6):数字反转
例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):数字反转的更多相关文章
- 黑马程序员——经典C语言程序设计100例
1.数字排列 2.奖金分配问题 3.已知条件求解整数 4.输入日期判断第几天 5.输入整数进行排序 6.用*号显示字母C的图案 7.显示特殊图案 8.打印九九口诀 9.输出国际象棋棋盘 10.打印楼梯 ...
- C语言程序设计100例之(22):插入排序
例22 插入排序 问题描述 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素或记录的任意序列,重新排列成一个以关键字递增(或递减)排列的有序序列. 排序的方法有很多,简单插入排序就是一 ...
- C语言程序设计100例之(9):生理周期
例9 生理周期 问题描述 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为 23 天.28 天和33 天.每一个周期中有一天是高峰.在高峰这天,人会在相应的方面表现出色.例如 ...
- C语言程序设计100例之(4):水仙花数
例4 水仙花数 题目描述 一个三位整数(100-999),若各位数的立方和等于该数自身,则称其为“水仙花数”(如:153=13+53+33),找出所有的这种数. 输入格式 没有输入 输出格式 若 ...
- C语言程序设计100例之(25):确定进制
例25 确定进制 问题描述 6*9 = 42 对于十进制来说是错误的,但是对于13进制来说是正确的.即 6(13)* 9(13)= 42(13),因为,在十三进制中,42 = 4 * 13 + ...
- C语言程序设计100例之(11):求质数
例11 求质数 问题描述 质数是指除了有1和自身作为约数外,不再有其他约数的数.比如:3.5.7是质数.而9不是质数,因为它还有约数3. 编写程序求给定区间中的所有质数. 输入格式 两个整数a和b, ...
- C语言程序设计100例之(23):数列求和
例23 数列求和 问题描述 已知某数列前两项为2和3,其后继项根据前面最后两项的乘积,按下列规则生成: ① 若乘积为一位数,则该乘积即为数列的后继项: ② 若乘积为二位数,则该乘积的十位上的数字和个 ...
- C语言程序设计100例之(21):折半查找
例21 折半查找 问题描述 顺序查找是一种最简单和最基本的检索方法.其基本思想是:从检索表的一端(如表中第一个记录或最后一个记录)开始,逐个进行记录的关键字和给定值的比较.若某个记录的关键字和给定值 ...
- C语言程序设计100例之(18):火柴棒等式
例18 火柴棒等式 用n根火柴棍,可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棒拼出的整数(若该数非零,则最高位不能是0).用火柴棒拼数字0~9的拼法如图1所示. 图1 用 ...
随机推荐
- bugku color
下载打开压缩包是七张图片,分别是七个颜色,使用stegsolve打开发现了异常. 七张图片拼起来是 make me tall,看来是要修改图片高度. 我们使用winhex打开图片并在十六进制中修改图片 ...
- 云上的芯脏病:奇怪的阿里云 RDS 数据库突发 CPU 近 100% 问题
最近遇到了奇怪的阿里云 RDS 数据库突发 CPU 近 100% 问题,遇到了3次. 第一次是10月12日(周六)凌晨 3:24 负载极低的时候开始出现,早上发现后进行了主备切换,恢复了正常. 第二次 ...
- VirtualBox for Mac 6.0.14 开源免费虚拟机方案
VirtualBox for mac是一款开源虚拟机软件,你可以利用该软件在Mac OS平台上运行Windows软件,即可以在一定程度上弥补Mac OS平台软件不足的劣势,玩家也可以获得Windows ...
- 马蜂窝 IM 移动端架构的从 0 到 1
(马蜂窝技术原创内容,公众号 ID:mfwtech) 移动互联网技术改变了旅游的世界,这个领域过去沉重的信息分销成本被大大降低.用户与服务供应商之间.用户与用户之间的沟通路径逐渐打通,沟通的场景也在不 ...
- 【Java 基础】谈谈集合.List
目录 1. ArrayList 1.1 ArrayList的构造 1.2 add方法 1.3 remove方法 1.4 查询方法 1.5 一些其他常用方法 1.6 ArrayList小结 2. Vec ...
- 后渗透神器Cobalt Strike的安装
0x01 简介 Cobalt Strike集成了端口转发.扫描多模式端口监听Windows exe木马,生成Windows dll(动态链接库)木马,生成java木马,生成office宏病毒,生成木马 ...
- 『嗨威说』算法设计与分析 - 动态规划思想小结(HDU 4283 You Are the One)
本文索引目录: 一.动态规划的基本思想 二.数字三角形.最大子段和(PTA)递归方程 三.一道区间动态规划题点拨升华动态规划思想 四.结对编程情况 一.动态规划的基本思想: 1.1 基本概念: 动态规 ...
- python问题:IndentationError:expected an indented block
Python语言是一款对缩进非常敏感的语言,给很多初学者带来了困惑,即便是很有经验的Python程序员,也可能陷入陷阱当中.最常见的情况是tab和空格的混用会导致错误,或者缩进不对,而这是用肉眼无法分 ...
- 百万年薪python之路 -- 字典(dict)练习
1.请将列表中的每个元素通过 "_" 链接起来. users = ['大黑哥','龚明阳',666,'渣渣辉'] users = ['大黑哥','龚明阳',666,'渣渣辉'] u ...
- 设计模式(二十三)Interpreter模式
在Interpreter模式中,程序要解决的问题会被用非常简单的“迷你语言”表述出来,即用“迷你语言”编写的“迷你程序”把具体的问题表述出来.迷你程序是无法单独工作的,还需要用java语言编写一个负责 ...