华为机试题(5)

第一题 整数化成字符串

给定一个整数(有可能是负数),将整数变成字符串。函数已经声明好类似void change(int number, char s[])的形式。可以自己写用例测试。

#include <stdio.h>
#include <string.h>

void change(int number, char s[])
{
	int m;
	int i;
	char tmp[50];
	if(number>0)
	{
		m=0;
		while(number>0)
		{
			tmp[m]=number%10+'0';
			number=number/10;
			m++;
		}
		tmp[m]='\0';
		for(i=0;i<m;i++)
		{
			s[m-1-i]=tmp[i];
		}
		s[m]='\0';
	}
	else if(number<0)
	{
		number=-number;
		m=0;
		while(number>0)
		{
			tmp[m]=number%10+'0';
			number=number/10;
			m++;
		}
		tmp[m]='\0';
		for(i=0;i<m;i++)
		{
			s[m-i]=tmp[i];
		}
		s[0]='-';
		s[m+1]='\0';
	}
	else
	{
		s[0]='0';
		s[1]='\0';
	}

}
int main(/*int argc, char **argv*/)
{
	int number=-7782347;
	char s[50]={0};
	change(number,s);
	printf("%s\n ",s);

	system("pause");
	return 0;
}


 给定一个字符串,寻找它的一个最大子串,该子串是回文。例如给定用例字符串”gabcdcbaef”,那么最大回文字串是”abcdcba”。函数声明为void huiwen(char input[], int len, char output[])。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void max_sub_huiwen(char input[], char output[])
{
	int flag = 1;
	char *p=input,*q=input;
	char *p_end;
	char *begin,*end;//判断回文串用到
	while(*q)
		q++;
	q--;//q指向末尾最后一个字符
	p_end = q;
	//printf("last =%c",*q);
	while(p<p_end)
	{
		while(1)
		{
			while((*p != *q) && (p<q))
				q--;
			if(p == q)
				break;
			if(p < q)//判断是不是回文串
			{
				begin = p;
				end = q;
				while(begin<end)
					if(*begin++ != *end--)
					{
						flag = 0;
						break;
					}
				if(flag == 1)
				{
					while(p <= q)
						*output++ = *p++;
					*output='\0';
					return;
				}
				
			}
			q--;
		}
		p++;
		q = p_end;
	}

}
int main(/*int argc, char **argv*/)
{
	char input[50]="gabcdcbaef";
	char output[50]={0};
	printf("%s\n ",input);
	max_sub_huiwen(input,output);
	printf("%s\n ",output);
	system("pause");
	return 0;
}


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值