【题】
子数整除(选作)
对于一个五位数a1a2a3a4a5,可将其拆分为三个子数:
- sub1=a1a2a3
- sub2=a2a3a4
- sub3=a3a4a5
例如,五位数20207可以拆分成:
- sub1=202
- sub2=020(=20)
- sub3=207
现在给定一个正整数K,要求你编程求出10000到30000之间所有满足下述条件的五位数,条件是这些五位数的三个子数sub1、sub2、sub3都可被K整除。
输出时请按照由小到大的顺序排列(每行输出一个数)。
这题没什么可说的,很简单。。。这题涉及到数组无非是需要求子数,但求子数并不需要数组,用除法和取模就可以实现了。
【代码】
#include "stdio.h" int main(int argc, char **argv) { int i, k; scanf("%d", &k); getchar(); int x, y, z; for (i = 10000; i <= 30000; i++) { x = i / 100; y = i % 10000 / 10; z = i % 1000; if (x % k == 0 && y % k ==0 && z % k == 0) { printf("%d\n", i); } } return 0; }
(2)数组,先求出i的每一位,然后得到三个子数。
#include "stdio.h" #include "math.h" int main(int argc, char **argv) { int i, j, k; int temp, arr[5]; //保存数的各个位 scanf("%d", &k); getchar(); int x, y, z; for (i = 10000; i <= 30000; i++) { for (j = 0; j < 5; j++) //数组初始化 arr[j] = 0; temp = i; j = 4; // while(temp) //从最高位开始,把每一位分别存入数组 { arr[j] = temp / (int)pow(10, j); temp %= (int)pow(10, j); j--; } x = arr[4] * 100 + arr[3] * 10 + arr[2]; //组合成三个子数 y = arr[3] * 100 + arr[2] * 10 + arr[1]; z = arr[2] * 100 + arr[1] * 10 + arr[0]; if (x % k == 0 && y % k ==0 && z % k == 0) { printf("%d\n", i); } } return 0; }