大数据相乘是面试经常考到的,我同学在腾讯面试时也遇到了这个问题,还是放在第三大题的位置,所以还是要整理一下这个大数据相乘的思路的.
下面我写一下我的思路(有不正确的或者疑问的地方请指出~互相进步!):
void reserve(char ch[])
{
int tmp = 0;
int i ;
for (i = 0; i < strlen(ch)/2;i++)
{
tmp = ch[i];
ch[i] = ch[strlen(ch)-i-1];
ch[strlen(ch)-i-1] = tmp;
}
}
int main(int argc, char const *argv[])
{
char data1[] = "99999999436654365436543654365999999999999999999999999999";
char data2[] = "99999999999999999999999999999999999999999999999999999999";
reserve(data1);
reserve(data2);
char data3[1000] = {0} ;
int i,j;
int multiflag = 0;
int addflag = 0;
int n = strlen(data1);
int m = strlen(data2);
int tmp2;
int tmp = 0;
for (i = 0;i < n;i++)
{
multiflag = 0;
addflag = 0;
for (j = 0;j < m;j++)
{
int tmp1 = (data1[i]-'0')*(data2[j]-'0') + multiflag;
multiflag = tmp1/10;
tmp1 %= 10;
if (data3[i+j] != '\0')
{
tmp2 = (data3[i+j] - '0') +tmp1+addflag;
}
else
{
tmp2 = tmp1+addflag;
}
addflag = tmp2/10;
data3[i+j] = tmp2%10 + '0';
}
data3[i+m] = multiflag+addflag+'0';
}
reserve(data3);
printf("%s\n",data3);
printf("计算结果长度:%d\n",strlen(data3));
return 0;
}