数组-子数整除

编程挑战:在10000到30000的五位数中,找出子数sub1、sub2、sub3都能被给定正整数K整除的所有数,按升序输出。

【题】

子数整除(选作)


对于一个五位数a1a2a3a4a5,可将其拆分为三个子数:

  • sub1=a1a2a3
  • sub2=a2a3a4
  • sub3=a3a4a5

例如,五位数20207可以拆分成:

  • sub1=202
  • sub2=020(=20)
  • sub3=207

现在给定一个正整数K,要求你编程求出10000到30000之间所有满足下述条件的五位数,条件是这些五位数的三个子数sub1、sub2、sub3都可被K整除。

输出时请按照由小到大的顺序排列(每行输出一个数)。

  测试输入关于“测试输入”的帮助 期待的输出关于“期待的输出”的帮助 时间限制关于“时间限制”的帮助 内存限制关于“内存限制”的帮助 额外进程关于“{$a} 个额外进程”的帮助
测试用例 1 以文本方式显示
  1. 15↵
以文本方式显示
  1. 22555↵
  2. 25555↵
  3. 28555↵
  4. 30000↵
1秒 64M 0
【分析】
            这题没什么可说的,很简单。。。这题涉及到数组无非是需要求子数,但求子数并不需要数组,用除法和取模就可以实现了。

【代码】
              (1)先不用数组,用除法和取模实现。

#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;
}



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值