博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据分离与结合算法之倒序输出
阅读量:5231 次
发布时间:2019-06-14

本文共 2088 字,大约阅读时间需要 6 分钟。

1 #define _CRT_SECURE_NO_WARNINGS//vs编译器去除scanf的警告 2 #include
3 //倒叙输出,输入12345,输出54321,输入的位数不定 4 int get_digit(int digit); 5 int getlg_n(int n); 6 int final_operate(int num, int wei); 7 int main(void) 8 { 9 int num;10 scanf("%d", &num);11 int wei=get_digit(num);12 printf("%d\n", final_operate(num, wei));13 return 0;14 }15 /*得到输入数字的位数*/16 int get_digit(int digit)17 {18 int bit_cout = 0;19 while (digit)20 {21 bit_cout++;22 digit /= 10;23 }24 return bit_cout;25 }26 /*得到10的几次方*/27 int getlg_n(int n)28 {29 int res = 1;30 for (int i = 0; i < n; i++)31 {32 res *= 10;33 }34 return res;35 }36 /*完成算法37 num:输入的数字38 wei:求得的位数39 return:最终的翻转数字40 */41 int final_operate(int num,int wei)42 {43 int turn_bit = 0, final_num = 0;44 for (int i = 0; i < wei; i++)45 {46 turn_bit = num % 10;//得到最后一位47 num /= 10;//为了得到每个数字做的约束48 final_num += turn_bit*getlg_n(wei - 1 - i);//思考为什么要wei-1-i49 //其实属于小学找规律的题50 }51 return final_num;52 }

上面的算法可以达到目的,备注也比较清晰了,但这属于基础级。

我们要翻转,首先要数据分离,求得输入数字的位数,求输入数字位数就是一个简单的分离,而我们要想使用最后的数据,又需要结合。

下面展示一个同样达到效果的程序,出自GF之手(^(* ̄(oo) ̄)^);

1 #include
2 int main() 3 { 4 int n; 5 scanf("%d", &n); 6 while (n) { 7 printf("%d", n % 10); 8 n /= 10; 9 }10 printf("\n");11 return 0;12 }

这份代码非常简洁的完成了要求,倒序输出,但却是毫无意义的。

第一,这个只是单纯的输出,没有真正可利用的数据,只有分离没有结合;

第二,写了这个代码之后,以后需要类似代码还是得重新写,比如我需要倒序之后加10.1输出;

第三,复用性不够,也就是第二点提出的问题,我们需要写出一个算法之后,在以后的代码开发过程中可以复用,所以应该把他们封装成函数接口供以调用。。。

 

数学高手些的实现方法:

 

#define _CRT_SECURE_NO_WARNINGS//vs编译器去除scanf的警告#include
int main(){ int n; scanf("%d", &n); int final_num = 0,wei; while (n) { final_num *= 10;//循环乘10,为了实现后面的加法得到最终结果 wei = n % 10;//取最后一位 final_num += wei;//每次循环都需要乘以10再加上来,也就是把分离的过程提到一步完成 n /= 10; } printf("%d\n",final_num); return 0;}

 

这个需要一定的数学思维,分析算法并有自己的设计思想。

算法,是一步步锻炼起来的。

 

转载于:https://www.cnblogs.com/yangguang-it/p/6544514.html

你可能感兴趣的文章
git命令
查看>>
《深入理解Android2》读书笔记(五)
查看>>
《构建之法》(七)
查看>>
${}
查看>>
结对编程
查看>>
mouseenter事件和mouseover事件
查看>>
谈C#中的Delegate
查看>>
诗、赏析
查看>>
退役快乐
查看>>
《EffctiveJava》泛型
查看>>
第一阶段冲刺报告(六)
查看>>
bzoj5442: [Ceoi2018]Global warming
查看>>
mysql语句执行顺序
查看>>
python学习——文件操作
查看>>
manjaro—更换deepin桌面
查看>>
公司文化之 上级与下级
查看>>
php 中json_decode()和json_encode()的使用方法
查看>>
Au3 学习笔记 第一天
查看>>
使用Thymeleaf
查看>>
2016/1/18
查看>>