原题链接:数字整除
解题思路:递归法解决
——递归终止条件为:当所要考察的数的位数小于等于9时(int型变量),可以直接根据“除17的余数是否为0”来判断该数是否可被17整除;
——递归过程为:根据题中所给方法,某数能被17整除,当且仅当“由该数变换得到的、少了一位的数”也能被17整除。
注意事项: 用字符数组存储所要判断的数,用len长度表示数的位数,用结果数组result[]存储每一组测试所得结果,最后输出。
参考代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include <stdio.h> #include <math.h> #include <string.h> int judge( char a[], int len) { int i,value=0; if (len<=9) { for (i=0;i<len;i++) { value =value*10+( int )(a[i]- '0' ); } return (value%17==0); } int deduct=(a[len-1]- '0' )*5; int D=(a[len-2]- '0' )+(a[len-3]- '0' )*10+(a[len-4]- '0' )*100; int res=D-deduct; a[len-4]= '0' +res/100; a[len-2]= '0' +res%10; a[len-3]= '0' +(res-res/100*100)/10; return judge(a,len-1); } int main() { char a[101]; int result[10]; int j=0,k; while (j<10) { scanf ( "%s" ,a); if (a[0]== '0' ) break ; int len= strlen (a); result[j++]=judge(a,len); } for (k=0;k<j;k++) printf ( "%d\n" ,result[k]); return 0; } |
0 分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复