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