华为社招现场面试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--;
}
}
}
缺点:浪费你存。每一位竟然用了一个整数来标志。
看结果: