华为上机笔试题目

今天在网上看到了几道华为的上机题目,题目描述进行了简化,题目原意没有改变。如果发现错误欢迎大家一起讨论交流。
1. 给定一个字符串,把字符串内的字母转换成该字母的下一个字母,a换成b,z换成a,Z换成A。如aBf转换成bCg,字符串内的其他字符不改变。
函数原型:void StringChange(const char *input, char *output);
input:输入字符串,output:输出字符串
void  StringChange (const char *input, char *output)
{
	while(*input)
	{
		if(*input >= 'a' && *input <= 'z')
		{
			*output = *input + 1;
			if(*output > 'z')
				*output = 'a';
		}
		else if(*input >= 'A' && *input <= 'Z')
		{
			*output = *input + 1;
			if(*output > 'Z')
				*output = 'A';
		}
		else
			*output = *input;
		++input;
		++output;
	}
	*output = '\0';
}
2. 求一个整数中有没有相同的部分,例如12389756123这个整数中相同的部分是123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。
函数原型:int same(int num);
注释:给出的测试用例超出了int的表示范围
int same(int num)
{
	char ca[20], *p, *q;
	itoa(num, ca, 10);
	p = ca;
	while(*p)
	{
		q = p + 1;
		while(*q)
		{
			if(*p == *q && *(p+1) == *(q+1))
				return 1;
			q++;
		}
		p++;
	}
	return 0;
}
3. 求两个字符串的乘积。
例如:输入“123”,“456”,输出“56088”
函数原型: void longmulti(const char *a, int len_a, const char *b, int len_b, char *c) ;
void longmulti(const char *a, int len_a, const char *b, int len_b, char *c)
{
	int i, j, k, n, carry;
	i = j = k = 0;
	//如果a,b中有一个是0,则整个运算的结果为0
	if(!strcmp(a, "0") || !strcmp(b, "0"))
	{
		c[0] = '0';
		c[1] = '\0';
		return;
	}
	//判断运算结果的正负号
	if(a[0] == '-')
	{
		i = 1;
		k = !k;
	}
	if(b[0] == '-')
	{
		j = 1;
		k = !k;
	}
	//如果出现了符号,先将符号过滤掉
	if(i || j)
	{
		if(k)
			c[0] = '-';
		longmulti(a+i, len_a - i, b+j, len_b-j, c+k);
		return;
	}
	memset(c, '0', len_a + len_b);
	c[len_a + len_b] = '\0';
	//各位数的运算
	#define I(a) (a - '0')
	for(i = len_a - 1; i >= 0; i--)
	{
		for(j = len_b - 1, k = i+j+1, carry = 0; j >= 0; j--, k--)
		{
			n = I(a[i]) * I(b[j]) + I(c[k]) + carry;
			c[k] = (n % 10) + '0';
			carry = n / 10;
		}
		c[k] += carry;
	}
	#undef I
	if(c[0] == '0')
		memmove(c, c+1, len_a + len_b);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值