实例19:判断正整数n的d进制表示形式是否是回文数(顺着看和倒着看相同的数)。

主要思路:

一种方法:将正整数n数转换成d进制的数,逐个比较首尾对应数字,判断是否为回文数。

另一种方法:将正整数n数转换成d进制的数,将低位数当做高位数,转换成正整数判断与原来的数是否相等。

书中采用的是第二种方法,下面的程序中与实例18相结合,实例18中对无符号整数进行转换,但是在实际的编程中从结果上看没有太大的区别。

(代码与书中代码有一定出入)

 #include <stdio.h>
#include <stdlib.h> #define M sizeof(unsigned int)*8 /*实例18中主要用到的函数,将无符号整数转换成d进制数*/
int Trans(unsigned n, int d, char s[])
{
static char digits[] = "0123456789ABCDEF";
char buf[M+];
int i, j = M; if(d< || d>)
{
s[] = '\0';
return ;
} buf[i] = '\0';
do
{
buf[--i] = digits[n%d];
n /= d;
}while(n); for(j=; (s[j] = buf[i]) != '\0'; j++,i++);
return j;
} /*函数circle用于判断正整数n的d进制数表示形式是否是回文数*/
int Circle(int n, int d)
{
int s = ;
int m = n; while(m)
{
s = s*d + m%d;
m /= d;
} return s == n;
} int scale[] = {,,,}; //需要转换成的进制(d进制)
int num[] = {, , , , }; //需要转换的整数 int main()
{
char Str_Trans[];
int i, j; for(i=; i<sizeof(num)/sizeof(num[]); i++)
{
for(j=; j<sizeof(scale)/sizeof(scale[]); j++)
{
Trans(num[i], scale[j], Str_Trans);
if(Circle(num[i], scale[j]))
printf("%3d -> %10s -> (%2d) is a Circle Number!\n", num[i], Str_Trans, scale[j]);
else
printf("%3d -> %10s -> (%2d) is not a Circle Number!\n", num[i], Str_Trans, scale[j]);
}
}
printf("\n Press any key to quit...\n");
return ;
}

C语言实例解析精粹学习笔记——19的更多相关文章

  1. C语言实例解析精粹学习笔记——18

    <C语言实例解析精粹>中编译环境采用的是Turbo C 2.0.但是这个编译器年代久远,较新的编译器对书中的某些例子支持不好,在学习的时候同时做一些笔记. 实例18:将一个无符号整数转换为 ...

  2. C语言实例解析精粹学习笔记——35(报数游戏)

    实例35: 设由n个人站成一圈,分别被编号1,2,3,4,……,n.第一个人从1开始报数,每报数位m的人被从圈中推测,其后的人再次从1开始报数,重复上述过程,直至所有人都从圈中退出. 实例解析: 用链 ...

  3. C语言实例解析精粹学习笔记——42(插入排序)

    实例说明: 将一个整数数组按从小到大的顺序进行排序.(主要学习基本的插入排序和改进的冒泡排序的算法和应用) 思路1: 从第一个数据开始,分别比较其后的数据,若比它小,则将这两个数的位置交换:从第一个数 ...

  4. C语言实例解析精粹学习笔记——36(模拟社会关系)

    实例: 设计一个模拟社会关系的数据结构,每个人的信息用结构表示,包含名字.性别和指向父亲.母亲.配偶.子女的指针(只限两个子女).要求编写以下函数: (1)增加一个新人的函数 (2)建立人与人之间关系 ...

  5. C语言实例解析精粹学习笔记——32

    实例32: 编制一个包含姓名.地址.邮编和电话的通讯录输入和输出函数. 思路解析: 1.用结构体来完成姓名.地址.邮编和电话的组合. 2.结构体指针的使用. 3.malloc的使用 4.scanf函数 ...

  6. C语言实例解析精粹学习笔记——31

    实例31: 判断字符串是否是回文 思路解析: 引入两个指针变量(head和tail),开始时,两指针分别指向字符串的首末字符,当两指针所指字符相等时,两指针分别向后和向前移动一个字符位置,并继续比较, ...

  7. C语言实例解析精粹学习笔记——30

    实例30: 用已知字符串s中的字符,生成由其中n个字符组成的所有字符排列.设n小于字符串s的字符个数,其中s中的字符在每个排列中最多出现一次.例如,对于s[]="abc",n=2, ...

  8. C语言实例解析精粹学习笔记——28

    实例28:从键盘读入实数 题目要求: 编制一个从键盘读入实数的函数readreal(double *rp).函数将读入的实数字符列转换成实数后,利用指针参数rp,将实数存于指针所指向的变量*rp. 思 ...

  9. C语言实例解析精粹学习笔记——43(希尔排序)

    实例说明: 用希尔排序方法对数组进行排序.由于书中更关注的实例,对于原理来说有一定的解释,但是对于第一次接触的人来说可能略微有些简略.自己在草稿纸上画了好久,后来发现网上有好多很漂亮的原理图. 下面将 ...

随机推荐

  1. MongoDB限制记录数

    MongoDB limit()方法 要限制 MongoDB 中返回的记录数,需要使用limit()方法. 该方法接受一个数字类型参数,它是要显示的文档数. 语法 limit()方法的基本语法如下: & ...

  2. sqlserver 2008 r2 直接下载地址,可用迅雷下载

    转自 http://www.cnblogs.com/chinafine/archive/2010/12/23/1915312.html sqlserver 2008 r2 直接下载地址,可用迅雷下载 ...

  3. cv2.resize

    import cv2 img = cv2.imread('0_116_99_355_0.jpg') # 方法一: # res = cv2.resize(img,None,fx=2,fy=2,inter ...

  4. MyBatis(8)延迟加载&缓存

    什么是延迟加载? resultMap可以实现高级映射,association,collection具有延迟加载的功能.   当我们需要查询某个信息的时候,再去查询,达到按需查询,就是延迟加载   可以 ...

  5. MyBatis框架(6)动态sql

    本次全部学习内容:MyBatisLearning   什么是动态sql:     mybatis的核心,对sql进行灵活的操作,通过对表达式的判断,对sql灵活的拼接 在之前小案例的基础上我们先进行简 ...

  6. CQRS轻量级框架【CQRSlite】学习使用小记

    前言 这几天在研究DDD和CQRS.快把我绕晕了.发现国外的好文质量还是挺高的.之所以先体验CQRSlite这个小框架,是因为看了一位大神写的文章:https://www.codeproject.co ...

  7. [转]解決 IE10 瀏覽器無法使用 ASP.NET 表單驗證登入的問題

    今天凌晨在客戶端上線,當程式佈署到正式機後發現我們的網站唯獨只有 IE10 瀏覽器無法成功登入,任何其他瀏覽器版本或使用較低的 IE 版本都可以正常登入,使用 IE 相容性檢視也都可以正常登入,想說會 ...

  8. x+=i和x = x+i比较 -- 简单赋值和复合赋值

    这两个赋值方式其实是有区别的,如果最后结果的类型和左操作数的类型一样,那么这两个表达式就完全等价. 下面来看看两个例子来理解它们的区别: 编写一个程序,使得x+=i合法, x = x+i: 不合法. ...

  9. java Thread 类 run 和 start 方法区别

    public class ThreadModle { public static void main(String[] args) throws InterruptedException { Thre ...

  10. Finder 的分栏显示模式宽度调整

    Mac系统下设置 Finder 分栏默认宽度的方法     苹果电脑 Mac OS X 系统中最重要的功能:Finder 有四种显示模式:图标.列表.分栏.Cover Flow,很多 Mac “老手” ...