您的位置:首页 > 职场人生

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

2012-10-16 20:17 555 查看
华为社招现场面试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--;

}

}

}

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

看结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试 华为