像这种题目要怎么处理存储数据会比较好呢O.o
#include
#include
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;n0};
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;i2*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;iif(yinshu[i][2*k]==canzhao)
cnt++;
(yinshu[i][2*k+1]2*k+1]):(min=min);
}
if(cnt==N)
{
result[n]=canzhao;
result[n+1]=min;
//次方取最低次
n+=2;
}
}
return result;
}
对于求一组数的最大公约数,可以使用辗转相除法或欧几里得算法。在存储数据方面,可以使用数组来存储这组数,然后对数组中的数进行求最大公约数的操作。下面是一个使用辗转相除法求一组数的最大公约数的示例代码:
#include <stdio.h>
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
int main() {
int n;
printf("请输入一组数的个数:");
scanf("%d", &n);
int a[n];
printf("请输入这组数:");
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
int result = a[0];
for (int i = 1; i < n; i++) {
result = gcd(result, a[i]);
}
printf("这组数的最大公约数是:%d\n", result);
return 0;
}
这个示例代码中使用了一个名为 gcd
的函数来求两个数的最大公约数,然后在 main
函数中使用循环来求整个数组的最大公约数。