像这种题目要怎么处理存储数据会比较好呢O.o
#include<stdio.h>
#include<stdlib.h>
int *fenjiezhiyinshu(int input);
int *same(int **yinshu,int N);
int main(void)
{
int N,n;scanf("%d",&N);
int t=0;
int gongyueshu=1;
int *result;
int num[10];
int i=0;
int cnt[N][1000];
while(scanf("%d",&num[i])!=-1)
{
i++;
getchar();
}
//利用双层循环,输出公因数即其个数
for(n=0;n<i;n++)
{
cnt[n]={0};
cnt[n]=fenjiezhiyinshu(num[i]);
//利用fenjiezhiyinshu()函数,返回存储每个数的质因数的的数组,但是编译器无法编译,不知道要怎么处理比较好
}
result=same(cnt,N);
for(n=0;result[2*n]!='\0';n++)
{
if(result[2*n+1]>1)
{
for(i=0;i<result[2*n+1];i++)
printf("%d",result[2*n]);
gongyueshu*=result[2*n+1];
}
else
{
printf("%d",result[2*n]);
gongyueshu*=result[2*n+1];
}
if(result[2*(n+1)]!='\0')
printf("*");
}
printf("=%d",gongyueshu);
return 0;
}
int *fenjiezhiyinsu(int input)
{
int n=0;
int i=2;
int cnt=0;
int *output=(int *)malloc(1000);
while(i<=input)
{
if(input%i==0)
{
cnt++;
output[n]=i;
output[n+1]=cnt;
input=input/i;
}
else
{
i++;
n+=2;
cnt=0;
}
}
return output;
}
//N是输入的数字个数,即二维数组的数组元素的个数
int *same(int **yinshu,int N)
{
int i,k;
int n=0;
int cnt=0;
int min=9;
int canzhao=yinshu[0][0];
int *result=(int *)malloc(1000);
for(k=0;yinshu[i][2*k]!='\0';k++)
{
//通过双层循环确定是否是公因数
for(i=0;i<N;i++)
{
if(yinshu[i][2*k]==canzhao)
cnt++;
(yinshu[i][2*k+1]<min)?(min=yinshu[i][2*k+1]):(min=min);
}
if(cnt==N)
{
result[n]=canzhao;
result[n+1]=min;
//次方取最低次
n+=2;
}
}
return result;
}