Ceceliaaa 2023-04-11 15:52 采纳率: 66.7%
浏览 20
已结题

关于 一组数的最大公约数 的数据处理问题

像这种题目要怎么处理存储数据会比较好呢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;
     
 }

img

  • 写回答

1条回答 默认 最新

  • 「已注销」 2023-04-11 21:47
    关注

    以下内容部分参考ChatGPT模型:


    对于求一组数的最大公约数,可以使用辗转相除法或欧几里得算法。在存储数据方面,可以使用数组来存储这组数,然后对数组中的数进行求最大公约数的操作。下面是一个使用辗转相除法求一组数的最大公约数的示例代码:

    #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 函数中使用循环来求整个数组的最大公约数。


    如果我的建议对您有帮助、请点击采纳、祝您生活愉快

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月20日
  • 已采纳回答 4月12日
  • 创建了问题 4月11日

悬赏问题

  • ¥30 不会,学习,有偿解答
  • ¥15 SQL查询语句报错(检查)
  • ¥15 此表中公式应该怎么写
  • ¥15 求HI-TECH PICC 9.50 PL3安装包
  • ¥15 在Windows中运行ollama出现运行缓慢的情况
  • ¥15 下载ctorch报错,求解
  • ¥15 如何将这段css代码应用于wordpress的elementor的单个小部件中显示,而不是整个网站全局显示。
  • ¥15 如何入门学习c语言,单片机
  • ¥15 idea 编辑语言的选择
  • ¥15 Windows下部署Asmjit