项目1-11-1:分离各位数
1 /* 分离各位数.cpp: 2 问题描述:写一个程序,输入x(三位数),输出其个、十、百位数,用空格隔开 3 样例输入:768 4 样例输出:8 6 7 5 */ 6 7 #include "stdafx.h" 8 9 int main() 10 { 11 int n, m; 12 scanf_s("%d",&n); 13 14 do 15 { 16 m = n % 10; 17 printf("%d", m); 18 19 n = n / 10; 20 21 } while (n != 0); 22 23 return 0; 24 }
感想:
最经典的module之一,对10^n取余,可以从数值中,取出n位以下的位数(含n位);
分离各位数就是基于这个方法,然而(任意位数的数值)分离各位数,如何实现正序(原序)排列呢?
项目1-11-2:分离整数部分与小数部分
1 /* 分离整数和小数部分.cpp: 2 问题描述:编写一个程序,其功能为:从键盘上输入一个浮点数(小数点后有三位数),然后分别输出该数的整数部分和小数部分。 3 样例输入:123.456 4 样例输出:123 456 5 */ 6 7 #include "stdafx.h" 8 9 10 int main() 11 { 12 float f; 13 int n, m, l(0); 14 scanf_s("%f", &f); 15 n = f; 16 17 l = (f * 1000); 18 m = l % 1000; 19 //方案2:m = (int)(f * 1000) % 1000; 20 //方案1:m = 1000 * (f - n); 21 22 printf("%d %d", n, m); 23 24 return 0; 25 }
感想:
这道题的求解主要利用,项目1-4-2-2:计算并联电阻 中重点讨论过的,运算中 数据类型 的隐性转换。
然而隐性转换的微妙之处,在方案1和方案2的输出结果上就有所体现:
方案1是笔者最初的方案:
方案2是老师的方案:
方案1的结果很好理解,就是浮点数转换为整数,没有什么四舍五入的规则,而是直接舍去了小数部分;
然而方案2,居然实现了四舍五入的功能。
两个方案/算法 结果上的差异究竟是如何产生的?