解一道面试题——华为社招现场面试1:请使用代码计算1234567891011121314151617181920*2019181716151413121110987654321 。

华为社招现场面试1:请使用代码计算1234567891011121314151617181920*2019181716151413121110987654321 。

代码如下:

#include <stdio.h>
#include <stdlib.h>
void computing(int* array1,int* array2,int* array3,int array1_length,int array2_length,int array3_length);
void main()
{
	int array_1[31];//1234567891011121314151617181920
	int array_2[31];//2019181716151413121110987654321
	int a1[5]={4,4,4,4,4};
	int a2[5]={2,2,2,2,2};

	int a3[3];
	int i,j,k;
	int array_3[100];

	//a1[5]={1,2,3,4,5};
	//a2[5]={5,4,3,2,1};

	for (i=0;i<3;i++)
	{
		a3[i]=9;
	}

	for (i=0;i<100;i++)
	{
		array_3[i]=0;
	}
	//初始化array_1[]和array_2[]
	for (i=1,j=-1;i<21;i++)
	{
		if (i<10)
		{
			j++;
			array_1[j]=i;
			array_2[30-j]=i;

		}
		else
		{
			j=j+2;

			array_1[j]=i%10;
			array_1[j-1]=i/10;

			array_2[30-j]=i/10;
			array_2[30-j+1]=i%10;


		}

	}




	//输出:array_1[]和array_2[]
	printf("array_1:");
	for (i=0;i<31;i++)
	{


		printf("%d",array_1[i]);
		//printf("\n");
	}
	printf("\n");

	printf("array_2:");
	for (i=0;i<31;i++)
	{


		printf("%d",array_2[i]);
		//printf("\n");
	}

	printf("\n");



	/*for (i=30;i>=0;i--)
	{
		k=69+i;

		for (j=30;j>=0;j--)
		{


			array_3[k]=array_3[k]+array_1[j]*array_2[i];

			if (array_3[k]>=10)
			{
				array_3[k-1]=array_3[k-1]+array_3[k]/10;

				array_3[k]=array_3[k]%10;
			}

			k--;

		}

	}*/
	//computing(array_1,array_2,array_3,31,31,100);
	computing(array_1,array_2,array_3,31,31,100);


	for (i=0;i<100;i++)
	{

		if (array_3[i]>0)
		{
			int j=i;
			for (j=i;j<100;j++)
			{
				printf("%d",array_3[j]);
			}
			break;
		}
		
		//printf("%d",array_3[i]);
	}





}

void computing(int* array1,int* array2,int* array3,int array1_length,int array2_length,int array3_length)
{

	int i,j,k;
	for (i=array1_length-1;i>=0;i--)
	{
		k=array3_length-array1_length+i;

		for (j=array2_length-1;j>=0;j--)
		{


			array3[k]=array3[k]+array1[j]*array2[i];

			if (array3[k]>=10)
			{
				array3[k-1]=array3[k-1]+array3[k]/10;

				array3[k]=array3[k]%10;
			}

			k--;

		}

	}


}

缺点:浪费你存。每一位竟然用了一个整数来标志。
看结果:

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值