UVA 993 Product of digits

/*
给一个数n,求输出一个最小的整数ans,该整数各位上的数的乘积等于n
思路:如果n不等于1或0,可找出n在2到9之间的所有因子(包括相同的)
 用这些因子组成一个最小的整数

*/

#include <stdio.h>
int main()
{
	int t,ans[128];
	scanf("%d",&t);
	while(t--)
	{
		int n,num=0;
		scanf("%d",&n);
		if(n<2)
			printf("%d",n);
		else
		{
			for(int i=9;i>1;i--)/*除非n=1,否则ans的各位数上不会有1
				为使该整数最小,所以从9到1枚举它的各位数*/
				while(n%i==0)
				{
					ans[num++]=i;//保留该因子,且长度加1
					n/=i;//除去该因子
				}
			if(n==1)//如果存在满足题意的ans,则除去所有的非1因子后,n==1
				for(int i=num-1;i>=0;i--)
					printf("%d",ans[i]);
			else
				printf("-1");
		}
		printf("\n");
	}
	return 0;
}
/*
利用递归可以一步步找到因子,再利用栈(函数本身是用栈来实现的)来保存因子,
直到找到所有的因子后,在从栈依次里面弹出因子后输出,无需开数组保存,看上去比较灵活
*/

#include <stdio.h>
int t,n;
void search(int sum)//n的非1因子
{
	if(sum>1)//递归边界
	{
		if(n%sum!=0)
			search(--sum);//如果sum不是n的因子,则寻找更小的因子(--sum)
		else
		{
			n/=sum;//除去该因子
			search(sum);
			if(n==1)/*如果存在满足题意的答案,则除去所有的非1因子后,n==1*/
				printf("%d",sum);
		}
	}
}
int main()
{
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		if(n<2)
			printf("%d",n);
		else
		{
			search(9);
			if(n!=1)
				printf("-1");	
		}
		printf("\n");
	}
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值