Chinaunix首页 | 论坛 | 博客
  • 博客访问: 534994
  • 博文数量: 181
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1498
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-22 15:17
个人简介

用发呆的时间来理清自己的思绪

文章存档

2015年(7)

2014年(134)

2013年(40)

分类: C/C++

2014-09-13 20:30:17

    今天,发现一个关于int型整数的反序问题,在此做了一个整理,代码如下:\

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int reverse_int_data(int *data)
  3. {
  4.     int i,j,k;

  5.     //分别求出输入参数的个位、十位、百位
  6.     i = *data / 100;
  7.     j = (*data - i * 100) / 10;
  8.     k = *data % 10;

  9.     //根据个、十、百进行反序
  10.     *data = k * 100 + j * 10 + i;

  11.     return 0;
  12. }

  13. //此函数是为了判断输入的整数是几位数,最后的返回结果是一个位数;
  14. int check_data_bit(int data)
  15. {
  16.     int bit = 1;

  17.     //如:123,第一次求123 / 10 = 12,第二次 12 / 10 = 1;第三次 1 / 10 = 0;
  18.     while(data / 10)
  19.     {
  20.         data = data / 10;
  21.         bit ++;
  22.     }

  23.     return bit;
  24. }


  25. int main(int argc, const char *argv[])
  26. {
  27.     int i,j,k,tmp;
  28.     int data = 0;
  29.     int bit,ret;

  30.     printf("Please input a three bit like 123 int num:\n");
  31.     
  32. again:
  33.     //注意:只要有外界输入,最好进行参数的合法性检查,提高程序的健壮性
  34.     //scanf函数的返回值是输入的数字字符的个数,比如输入123,则返回3
  35.     //遇到非法字符(非数字字符),则立即返回0
  36.     ret = scanf("%d",&data);
  37.     if(!(ret > 0 && ret < 10))
  38.     {
  39.         printf("the invalid input,please input again:\n");
  40.         
  41.         //为了不影响下一次的读入是上次缓存中的值,进行清缓存工作
  42.         while(getchar() != '\n');
  43.         
  44.         goto again;
  45.     }
  46.     printf("the data = %d\n",data);

  47.     bit = check_data_bit(data);
  48.     
  49.     //若输入的不是三位数,会提示用户重新输入,提高程序的安全性
  50.     if(bit != 3)
  51.     {
  52.         printf("the input number isn't a 3 bit number,please input again:\n");    
  53.         goto again;
  54.     }
  55.     printf("the data is a %d bit number\n",bit);

  56.     //对输入的数字进行反序
  57.     reverse_int_data(&data);
  58.     printf("after the rever,the data = %d\n",data);

  59.     return 0;
  60. }
运行结果:

点击(此处)折叠或打开

  1. ubuntu@ubuntu:~/interview/c_study$ ./a.out
  2. Please input a three bit like 123 int num:
  3. 654
  4. the data = 654
  5. the data is a 3 bit number
  6. after the reverse,the data = 456
    总结:对输入参数一定要进行合法性检查,把相关的处理过程封装成函数的形式,体现模块化的程序设计思想。其次,以上只是对一个三位数进行反序,其实可以做到任意多位数的反序,首先判断是一个几位数,然后调用相应的反序函数,反序函数的原理基本都差不多,都是要求出个、十、白、万……等各个位,然后反序就很简单了。
阅读(694) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~