码迷,mamicode.com
首页 > 其他好文 > 详细

0-9的除法

时间:2020-12-23 12:46:41      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:复数   排列   sub   lse   while   重复数   return   一个   判断   

一个正整数n(2<=n<=78) ,按照从小到大的顺序输出所有形如 abcde/fghij=n的表达式。
其中aj恰好为数字09的一个全排列(可以有前导0)。
这里我的形式并非是五位数除以五位数或者五位数除以四位数,只是满足数字用完的条件,所以代码还需要判断能否是六位数。

include <stdio.h>

int if_repeated(int n)//判断数字本身有重复数字 
{
	int a[10]={0};
	for(int i=0;n>0;i++) 
	{
		a[n%10]++;
		n/=10;	
	}	
	for(int i=0;i<10;i++)
	{
		if(a[i]>1) return 1;
	}
	return 0;
} 
//是否有前导0,所以要检查0应该出现在何处 
int five_four(int x,int y)//x是五位数,y是四位数 
{
	int b[10]={0};//标记数组,可以能判断数字是否出现 
	for(int i=0;x>0;i++){ 
		b[x%10]++;
		x/=10;	
	}	
	for(int i=0;y>0;i++){ 
		b[y%10]++;
		y/=10;	
	}	
	if(b[0]>0) return 0;
	for(int i=1;i<10;i++)
	{
		if(b[i]>1) return 0;
	} 
	return 1;	
}

int six_four(int x,int y)//x是五位数,y是四位数 
{
	int b[10]={0};
	for(int i=0;x>0;i++){ 
		b[x%10]++;
		x/=10;	
	}	
	for(int i=0;y>0;i++){ 
		b[y%10]++;
		y/=10;	
	}	
	for(int i=0;i<10;i++)
	{
		if(b[i]>1) return 0;
	} 
	return 1;	
}

int main()
{
	int n;
	while((scanf("%d",&n))!=EOF)
	{
		int x,y;
		if(n>10)
		{
			for(int i=1000;i<9999;i++)
			{
				y=i;
				if(if_repeated(y)) 
				{
					continue;
				}
				x=y*n;
				if(if_repeated(x))
				{
					continue;
				}
				if(x<100000)
				{
					if(five_four(x,y)) printf("%d  %d\n",x,y);
				} 
				else
				{
					if(six_four(x,y)) printf("%d   %d\n",x,y);
				}
				 
			}
			
		}
		else
		{
			for(int i=1000;i<99999;i++)
			{
				y=i;
				if(if_repeated(y)) 
				{
					continue;
				}
				x=y*n;
				if(x<10000) {
				continue;
				} 
				if(if_repeated(x))
				{
					continue;
				}
				if(y<10000)
				{
					if(five_four(x,y)) printf("%d  %d\n",x,y);
				} 
				else
				{
					if(six_four(x,y)) printf("%d  %d\n",x,y);
				}
				 
			}
		}
	}
	

		
}

0-9的除法

标签:复数   排列   sub   lse   while   重复数   return   一个   判断   

原文地址:https://www.cnblogs.com/tzp-empty-hya/p/14157700.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!