zoukankan      html  css  js  c++  java
  • C语言实例解析精粹学习笔记——19

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

    主要思路:

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

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

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

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

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 #define M sizeof(unsigned int)*8
     5 
     6 /*实例18中主要用到的函数,将无符号整数转换成d进制数*/
     7 int Trans(unsigned n, int d, char s[])
     8 {
     9     static char digits[] = "0123456789ABCDEF";
    10     char        buf[M+1];
    11     int         i, j     = M;
    12 
    13     if(d<2 || d>16)
    14     {
    15         s[0] = '\0';
    16         return 0;
    17     }
    18 
    19     buf[i] = '\0';
    20     do
    21     {
    22         buf[--i] = digits[n%d];
    23         n /= d;
    24     }while(n);
    25 
    26     for(j=0; (s[j] = buf[i]) != '\0'; j++,i++);
    27     return j;
    28 }
    29 
    30 /*函数circle用于判断正整数n的d进制数表示形式是否是回文数*/
    31 int Circle(int n, int d)
    32 {
    33     int s = 0;
    34     int m = n;
    35 
    36     while(m)
    37     {
    38         s = s*d + m%d;
    39         m /= d;
    40     }
    41 
    42     return s == n;
    43 }
    44 
    45 int scale[] = {2,10,16,8};               //需要转换成的进制(d进制)
    46 int num[]   = {232, 27, 851, 123, 111};  //需要转换的整数
    47 
    48 int main()
    49 {
    50     char Str_Trans[33];
    51     int i, j;
    52 
    53     for(i=0; i<sizeof(num)/sizeof(num[0]); i++)
    54     {
    55         for(j=0; j<sizeof(scale)/sizeof(scale[0]); j++)
    56         {
    57             Trans(num[i], scale[j], Str_Trans);
    58             if(Circle(num[i], scale[j]))
    59                 printf("%3d -> %10s -> (%2d) is a Circle Number!\n", num[i], Str_Trans, scale[j]);
    60             else
    61                 printf("%3d -> %10s -> (%2d) is not a Circle Number!\n", num[i], Str_Trans, scale[j]);
    62         }
    63     }
    64     printf("\n Press any key to quit...\n");
    65     return 0;
    66 }
  • 相关阅读:
    垃圾收集器与内存分配策略(二)之垃圾收集算法
    组合与继承
    垃圾收集器与内存分配策略(一)之对象存活判断
    虚拟机中对象的创建、内存布局、访问
    Java运行时数据区域划分
    Java操作excel表格
    位段
    sh -s用法
    ubutu14.04选中文本就会删除问题解决
    java容器-List
  • 原文地址:https://www.cnblogs.com/llccbb1/p/9571695.html
Copyright © 2011-2022 走看看