C语言·XDOJ练习·拼数字

C语言·XDOJ练习·拼数字

时间限制
1S

内存限制
1000Kb

问题描述
对于给定的字符序列(字符序列长度小于100),从左至右将所有数字字符取出拼接成一个无符号整数(拼接出的整数小于2^31)。
然后计算并输出该整数的最大因子(如果是素数或0,则其最大因子为自身)。

输入说明
输入数据为一行字符序列。

输出说明
对输入的字符序列,求出所得整数的最大因子;若字符序列中没有数字或找出的整数为0,则输出0。

输入样例
样例1输入
sdf0ejg3.f?9f
样例2输入
?4afd0s&2d79*(g
样例3输入
abcde

输出样例
样例1输出
13
样例2输出
857
样例3输出
0

#include
#include
#include

int main()
{
     
	char s[100]={
     '0'},a[100]={
     '0'};
	int num=0;
	int i,j,n=0,k=0;//循环数 
	int x;//10的次方 
	int y;//数字字符的数值 
	int digit=0;
	gets(s);
	for(i=0;i<strlen(s);i++)//遍历字符串 
	{
     
		if(s[i]>='0'&&s[i]<='9')
		{
     
			num+=1;//数字字符个数 
			k+=1;
			a[k-1]=s[i];//把数字字符转到另一个字符数组 
		}		
	}
	for(j=0;j<num;j++)//找到对应的数 
	{
     
		x=pow(10,num-j-1);
		y=(a[j]-'0');
		digit+=y*x;
	}
	/*寻找该整数的最大因子*/
	
	/*判断是否为素数*/
	if(digit==0)
	{
     
		printf("%d",digit);
	} 
	else if(digit!=0)
	{
     
		for(k=digit-1;k>0;k--)
		{
     
			if(digit%k==0)
			{
     
				n+=1;
				if(n==1)//如果遇到第一个因子即digit不是素数,输出该因子 (最大因子)
				{
     
					printf("%d",k);
					break;
				}
			}
		}
		/*一直没找到因子,即是素数*/
		if(n==0)
		{
     
			printf("%d",digit);//输出素数本身
		}
	}

	return 0;
}

你可能感兴趣的:(#C语言练习,c语言)