【题】
子数整除(选作)
对于一个五位数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;
}
编程挑战:在10000到30000的五位数中,找出子数sub1、sub2、sub3都能被给定正整数K整除的所有数,按升序输出。
379

被折叠的 条评论
为什么被折叠?



