收集的华为校园招聘的上机题(做整理而,在csdn论坛上找的)

本文介绍了一种在字符串A中查找并删除所有出现的字符串B的方法,并统计了B出现的次数。此外,还详细讲解了如何实现两个0-64位数的高精度乘法运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.在字符串中A中查找字符串B,删除该字符串A中的B,并且返回B的个数.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
int delete_sub_str(const char *str,const char *sub_str,char *result)
{
    assert(str!=NULL&&sub_str!=NULL); /* 入口处判断输入参数是否合法 */
    const char *p,*q;
    char *temp;
    p=str;q=sub_str; 
    int n,count=0; /* count用来记录字串数 */
    n=strlen(q);
    temp=(char *)malloc(n+1);
    memset(temp,0x00,n+1);
    while(*p) /* 遍历原始字符串 */
    {
        memcpy(temp,p,n);  //从p所指向的位置开始拷贝长度为字串长度的字符串到temp中
        if(strcmp(temp,q)==0)
            { // 如果temp与字串相等,字串数+1, p向后移动n个位置
                count++;
                memset(temp,0x00,n+1);
                p+=n;
            }
        else
            { // 如果temp不与字串相等, 则把p指向的当前拷贝到t中,并使p和t都指向下一位置
				*result =*p  ;
				result++;
				p++;
				memset(temp,0x00,n+1);
            }
    }
    free(temp);
    return count;
}


int main()
{
	char *str="i like to likelike yolikeu";
	char *sub_str="like";
	char result[30]={0};
    int count=delete_sub_str(str,sub_str,result);
    printf("%s\n",result);
    printf("%d\n",count);
    return 0;
}

2.高精度乘法,两个是0-64位的数,
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 200
#define bool int
#define TRUE 1
#define FALSE 0
int main()
{
	unsigned int an1[MAXLEN+10];
	unsigned int an2[MAXLEN+10];
	unsigned int result[MAXLEN*2+10];
	char szline1[MAXLEN+10];
	char szline2[MAXLEN+10];
	bool bstartoutput=FALSE;

	int i,j;

	scanf("%s",szline1);
	scanf("%s",szline2);
	memset(an1,0,sizeof(an1));
	memset(an2,0,sizeof(an2));
	memset(result,0,sizeof(result));

	j=0;
	for(i=strlen(szline1)-1;i>=0;i--)
	{
		an1[j++]=szline1[i]-'0';
	}
	j=0;
	for(i=strlen(szline2)-1;i>=0;i--)
	{
		an2[j++]=szline2[i]-'0';
	}
	for(i=0;i<strlen(szline2);i++)
	{
		for(j=0;j<strlen(szline1);j++)
		{
			result[i+j]+=an2[i]*an1[j];
			// printf("%d",result[i+j]);
		}
	}
	for(i=0;i<MAXLEN*2;i++)
	{
		if(result[i]>=10)
		{
			result[i+1] +=result[i]/10 ;
			result[i]%=10;
		}
	}

	for(i=MAXLEN*2;i>=0;i--)
	{
		if(bstartoutput)
		{
			printf("%d",result[i]);
		}
		else if(result[i])
		{
			printf("%d",result[i]);
			bstartoutput=TRUE;
		}
		// if(!bstartoutput)
		// {
			// printf("");
		// }
	}
	printf("\n");
return 0;
}

求相乘结果。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值