华为机试题(5)

第一题 整数化成字符串

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

  1. #include<stdio.h>
  2. #include<string.h>
  3. voidchange(intnumber,chars[])
  4. {
  5. intm;
  6. inti;
  7. chartmp[50];
  8. if(number>0)
  9. {
  10. m=0;
  11. while(number>0)
  12. {
  13. tmp[m]=number%10+'0';
  14. number=number/10;
  15. m++;
  16. }
  17. tmp[m]='\0';
  18. for(i=0;i<m;i++)
  19. {
  20. s[m-1-i]=tmp[i];
  21. }
  22. s[m]='\0';
  23. }
  24. elseif(number<0)
  25. {
  26. number=-number;
  27. m=0;
  28. while(number>0)
  29. {
  30. tmp[m]=number%10+'0';
  31. number=number/10;
  32. m++;
  33. }
  34. tmp[m]='\0';
  35. for(i=0;i<m;i++)
  36. {
  37. s[m-i]=tmp[i];
  38. }
  39. s[0]='-';
  40. s[m+1]='\0';
  41. }
  42. else
  43. {
  44. s[0]='0';
  45. s[1]='\0';
  46. }
  47. }
  48. intmain(/*intargc,char**argv*/)
  49. {
  50. intnumber=-7782347;
  51. chars[50]={0};
  52. change(number,s);
  53. printf("%s\n",s);
  54. system("pause");
  55. return0;
  56. }
#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[])。

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. voidmax_sub_huiwen(charinput[],charoutput[])
  5. {
  6. intflag=1;
  7. char*p=input,*q=input;
  8. char*p_end;
  9. char*begin,*end;//判断回文串用到
  10. while(*q)
  11. q++;
  12. q--;//q指向末尾最后一个字符
  13. p_end=q;
  14. //printf("last=%c",*q);
  15. while(p<p_end)
  16. {
  17. while(1)
  18. {
  19. while((*p!=*q)&&(p<q))
  20. q--;
  21. if(p==q)
  22. break;
  23. if(p<q)//判断是不是回文串
  24. {
  25. begin=p;
  26. end=q;
  27. while(begin<end)
  28. if(*begin++!=*end--)
  29. {
  30. flag=0;
  31. break;
  32. }
  33. if(flag==1)
  34. {
  35. while(p<=q)
  36. *output++=*p++;
  37. *output='\0';
  38. return;
  39. }
  40. }
  41. q--;
  42. }
  43. p++;
  44. q=p_end;
  45. }
  46. }
  47. intmain(/*intargc,char**argv*/)
  48. {
  49. charinput[50]="gabcdcbaef";
  50. charoutput[50]={0};
  51. printf("%s\n",input);
  52. max_sub_huiwen(input,output);
  53. printf("%s\n",output);
  54. system("pause");
  55. return0;
  56. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值