从循环角度分析逐位分离法
1、常规的逐位分离,求和或求积问题
一般会给固定的位数,让解题者按照位数利用%或\进行不同位置数字的提取。
2、遇到非常规问题,对于不限位数的整数的处理法则
(1)方法一:常规数组法,通过导入数组元素,逐位分离,运用高阶方法解决低阶问题,但值得注意的是,初次接触不限位数的逐位分离的大多数初学者,只拥有循环和判断语句的知识。在缺少对于数组知识的认知下,无法解决问题或是提出合理的程序架构。
(2)方法二:从个人最初对于此类问题的理解出发,我当时构想了一种循环嵌套switch语句实现了在缺乏数组知识下对不同位置数字的剥离和分离处理
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {int n;scanf("%d", &n);if (n == 0) {printf("ling");}else {if (n < 0) {printf("fu ");n *= -1;}int shi_n = 10;while (n / shi_n > 0) {shi_n *= 10;}shi_n /= 10;while (shi_n >= 1) {int num = n / shi_n;n -= num * shi_n;shi_n /= 10;/* int t=10;while (n/t>0){t=t*10;}t=t/10;while (t>=1){int n=n/t;n=n-(n*t);t=t/10;*/switch (num) {case 1:printf("yi");break;case 2:printf("er");break;case 3:printf("san");break;case 4:printf("si");break;case 5:printf("wu");break;case 6:printf("liu");break;case 7:printf("qi");break;case 8:printf("ba");break;case 9:printf("jiu");break;case 0:printf("ling");break;}if (shi_n > 0) {printf(" ");}}}return 0;
}
PS:此代码设计是为例实现对于整数的各个组成数字的发音
个人构想:
(1)我在开始导入了while语句,首先依据while的判断条件,提取出了对应的shi_n,该变量由于循环条件语句显示,会比输入的n的位数多一,所以选择了除以10.
(2)接着我通过逐位处理,将n的首位数字逐步剥离出来,并构造出逐阶递减的shi_n变量,实现了在循环过程中抽离高位数字的想法,再将其投入switch结构中进行分支处理。