最大素因子

183 阅读2分钟

题目描述

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

输入描述:

有多组数据,输入数据的第一行为一个正整数,表示字符序列的数目,每组数据为一行字符序列。

输出描述:

对每个字符序列,取出所得整数的最大素因子,若字符序列中没有数字或者找出的整数为0,则输出0,每个整数占一行输出。

示例

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

输出
13
857
0

思路

  • 定义一个字符数组,一个一个判断。

  • 输入字符串,判断是否有数字字符,若有,将其转化为数字,并用n保存。

  • 求最大因子:i从1到n-1循环,n对i取模,若能除尽,用t存放因子。循环到n-1,t存放的是最大的一个因子。若t=1,表示n为素数,则最大的因子是它本身。输出最大因子数。

具体实现

#include<bits/stdc++.h>
using namespace std;
int main(){
	char str[100];
	int i,n,f,t;
	cin>>f; //输入字符序列的个数 
	while(f--){//循环输入 
		memset(str,0,sizeof(str)); //将str用'0'表示 
		cin>>str;
		
		n=0; //存放拼接的数字 
		for(int i=0; i<100; i++){
			if(str[i]>='0' && str[i]<='9')
				n= n*10 + str[i] - '0'; //拼接为整数 
		} 
		
		if(n==0) cout<<0<<endl;
		else{ //求最大因子 
			for(int i=1; i<n; i++){
				if(n%i==0) 
					t=i;//存放因子 
			}
			if(t==1) //t为素数 
				t=n; //最大的素因子就是本身 
			cout<<t<<endl;
		}
		
	}
	return 0;
}

小结

memset()函数在程序中一般是用来进行数组初始化的,对申请的内存进行初始化,特别是比较大的数组或者是结构体,在定义的时候都应该进行初始化,因为不能保证申请的内存区是干净的,不进行memset(),在打印的时候可能会出现乱码