数制转换问题,确定数制,最长子串,统计字符数

void jinzhiConvert()//p进制转换为R进制
{
	int p,r,len,i,k,d,temp;
	char s[10],mod[10];
	while(~scanf("%d %d %s",&p,&r,&s))
	{

		len=strlen(s);
		k=1;
		d=0;
		for(i=len-1;i>=0;i--)//p进制转换为10进制
		{
			if(s[i]>='0'&&s[i]<='9')
				d+=(s[i]-'0')*k;
			if(s[i]>='A'&&s[i]<='F')
				d+=(s[i]-'A'+10)*k;
			k*=p;
		}
		
	/*	for(i=0;i<10;i++)
			mod[i]=0;

		for(i=0;i<10;i++)//10进制转为r进制
		{
			if(r>0&&r<=9)
			mod[i]=d%r+'0';
			if(r>=10&&r<=16)
			{
				mod[i]=d%r-10+'A';
			}
			d/=r;
			if(d<r) {mod[i+1]=d+'0';break;}
		}
		for(i=10;i>=0;i--)
		{
			if(mod[i]!=0) {printf("%s",mod);break;}
		}*/
		for(i=0;i<10;i++)
			mod[i]=0;

		mod[10]='';
		i=9;
		while(d!=0)//10进制转为r进制
		{
			temp=d%r;
			if(temp<=9) mod[--i]=temp+'0';
			else mod[--i]=temp-10+'A';
			d/=r;
		}

		for(i=0;i<10;i++)
		{
			if(mod[i]!=0) {printf("%s",&mod[i]);break;}
		}
	}
}

/**********确定数制*************/
/**                           **/
/**                           **/
int maxdigit(int m)
{
	int maxd=0,k;
	while(m!=0)
	{
		k=m%10;
		if(k>maxd)
			maxd=k;
		m=m/10;
	}
	return maxd;
}

int convertdecimal(int m,int k)
{
	int p,s;
	s=0;
	p=1;
	while(m!=0)
	{
		s+=m%10*p;
		m/=10;
		p=p*k;
	}
	return s;
}

void defineShuzhi()
{
	int p,q,r,B,n,i,d,dp,dq,dr;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d %d %d",&p,&q,&r);
		B=maxdigit(p);
		d=maxdigit(q);
		if(d>B)
			B=d;
		d=maxdigit(r);
		if(d>B)
			B=d;
		for(B++;B<=16;B++)
		{
			dp=convertdecimal(p,B);
			dq=convertdecimal(q,B);
			dr=convertdecimal(r,B);
			if(dp*dq==dr) break;
		}

		if(B>16) B=0;
		printf("%d
",B);
	}
}
/**                           **/
/**                           **/
/**********确定数制*************/


void maxLenSubStr() //最长子串
{
		char str[100][101],minStr[101],subStr[101],revSubStr[101];
	unsigned int i,j,t,m,n,substrlen,found,minlen;

	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		minlen=101;
		for(i=0;i<n;i++)
		{
			scanf("%s",str[i]);
			if(strlen(str[i])<minlen)
			{
				minlen=strlen(str[i]);
				m=i;
			}
		}
		strcpy(minStr,str[m]);
		substrlen=minlen;
		while(substrlen>0)
		{
			for(i=0;i<=minlen-substrlen;i++)
			{
				strncpy(subStr,minStr+i,substrlen);
				subStr[substrlen]='';
				strncpy(revSubStr,minStr+i,substrlen);
				revSubStr[substrlen]='';
				strrev(revSubStr);
				found=1;
				for(j=0;j<n;j++)
				{
					if(strstr(str[j],subStr)==NULL&&strstr(str[j],revSubStr)==NULL)
					{
						found=0;
						break;
					}
				}
				if(found) break;
			}
			if(found) break;
			substrlen--;
		}
		printf("%d
",substrlen);
	}
}

void countStr()//统计字符数
{
	int a[26],n,i,j,len,max;
	char s[50],alpha;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%s",s);
		
		for(j=0;j<26;j++)
			a[j]=0;

		len=strlen(s);

		for(j=0;j<len;j++)
		{
			a[s[j]-'a']++;
		}

		max=a[0];
		alpha='a';
		for(j=1;j<26;j++)
			if(a[j]>max) 
			{
				max=a[j];
				alpha=j+'a';
			}
		printf("%c %d
",alpha,max);
	}
}

原文地址:https://www.cnblogs.com/wangxueliang/p/9346501.html