我这里有一段C++的代码,但真是很难看,他的编程风格简直可以参加国际C混乱代码大赛了。
可以帮我解析一下吗?
//循环
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int d;
char str[255];
void chen(char *a,char *b)
{
char *c;
int i,j,k;
int l,l2;
l = strlen(a);
l2 = strlen(b);
c = (char *)malloc(sizeof(char)*(l+l2+1));
for(i = 0; i < l+l2+1; i++)
c[i] = '0';
int jin = 0;
for(i = l2-1; i >= 0; i--)
{
for(j = l-1; j >= 0; j--)
{
int temp = (a[j]-48) * (b[i]-48) + jin;
jin = 0;
if(temp >= 10)
{
jin = temp / 10;
temp = temp % 10;
}
c[i+j+1] += temp;
for(k = i+j+1; k > 0; k--)
if((c[k]-48)>=10)
{
c[k-1] += 1;
c[k] = c[k]-10;
}
else
break;
}
if(jin)
{
c[i+j+1] += jin;
for(int k = i+j+1; k > 0; k--)
if((c[k]-48)>=10)
{
c[k-1] += 1;
c[k] = c[k]-10;
}
else
break;
jin = 0;
}
}
if(jin)
c[0]+=jin;
else if(c[0]=='0')
{
memcpy(c,c+1,sizeof(char)*(l+l2-1));
c[l+l2-1] = '\0';
if(l+l2-1>d)
memcpy(str,c+l+l2-1-d,sizeof(char)*(d+1));
else
memcpy(str,c,sizeof(char)*(l+l2));
}
else
{
c[l+l2] = '\0';
if(l+l2>d)
memcpy(str,c+l+l2-d,sizeof(char)*(d+1));
else
memcpy(str,c,sizeof(char)*(l+l2+1));
}
free(c);
}
void chen(char *a,int n)
{
int l = strlen(a);
if(n==10)
{
a[l] = '0';
a[l+1] = '\0';
}
else
{
int jin = 0;
for(int i = l-1; i >= 0; i--)
{
int temp = (a[i]-48)*n+jin;
jin = temp / 10;
temp = temp % 10;
a[i] = temp+48;
}
if(jin)
{
memcpy(a+1,a,sizeof(int)*(l+1));
a[0] = jin+48;
}
}
return;
}
int main(void)
{
char n[255];
char a[255];
char b[255];
int l,i,j;
int xun[100];
scanf("%s %d",n,&d);
strcpy(a,n);
l = strlen(n);
for(i = 1; i <= 10; i++)
{
chen(a,n);
if(str[d-1]==n[l-1])
{
xun[0] = i;
break;
}
strcpy(a,str);
}
for(i = 2; i <= d; i++)
{
strcpy(b,a);
for(j = 1; j <= 10; j++)
{
chen(a,n);
if(str[d-i]==n[l-i])
{
xun[i-1]=j;
break;
}
chen(a,b);
strcpy(a,str);
}
if(j==11)
{
printf("-1\n");
return 0;
}
}
a[0] = '1';
a[1] = '\0';
for(i = 0; i < d; i++)
chen(a,xun[i]);
printf("%s\n",a);
return 0;
}