roberthsu2003 / cAndC-

51 stars 18 forks source link

設計一個程式,可以由鍵盤輸入兩個數值,並求出這2個數值的最大公因數和最小公倍數 #42

Closed roberthsu2003 closed 3 months ago

roberthsu2003 commented 3 months ago
顯示======================================
求兩數的最大公因數和最小公倍數
請輸入第一個整數:XXX
請輸入第二個整數:XXX

計算結果:
14 和 35 的最大公因數:7
14 和 35 的最小倍數是:70
fatpao commented 3 months ago
#include <stdio.h>

int main(void) {
  int num1, num2, numMAX, numMIN, numtemp1, numtemp2, numtemp3;
  printf("本程式可以求兩數的最大公因數和最小公倍數\n");
  printf("請輸入第一個[整數]:");
  scanf("%d", &num1);
  printf("請輸入第二個[整數]:");
  scanf("%d", &num2);

  //[參考輾轉相除法]兩個整數的最大公因數是能夠同時整除它們的最大的正整數。輾轉相除法基於如下原理:兩個整數的最大公因數等於其中較小的數和兩數相除餘數的最大公因數。例如,欲求252和105的最大公因數(252=21×12;105=21×5);因為252÷105=2...42,所以這個最大公因數也是42與105的最大公因數(42=21×2)。在這個過程中,較大的數縮小了,所以繼續進行同樣的計算可以不斷縮小這兩個數直至餘數為零。這時,所剩下的還沒有變成零的數就是兩數的最大公因數。

  if(num1 > num2){
    numtemp1 = num1 % num2;
    numtemp3 = num2;
    while(numtemp1 != 0){
      numtemp2 = num2 % numtemp1;
      numtemp3 = numtemp1;
      numtemp1 = numtemp2;
    }
    numMAX = numtemp3;
    numMIN = numMAX * ( num1 / numMAX) * ( num2 / numMAX);
  }else{
    numtemp1 = num2 % num1;
    numtemp3 = num1;
    while(numtemp1 != 0){
      numtemp2 = num1 % numtemp1;
      numtemp3 = numtemp1;
      numtemp1 = numtemp2;
    }
    numMAX = numtemp3;
    numMIN = numMAX * ( num1 / numMAX) * ( num2 / numMAX);
  }

  printf("%d和%d的最大公因數是:%d\n", num1, num2, numMAX);
  printf("%d和%d的最小公倍數是:%d\n", num1, num2, numMIN);
  return 0;
}
KKes5566812 commented 3 months ago
#include <stdio.h>
#include <stdlib.h>

int gcd(int num1, int num2){
  if(num1 % num2 == 0){
    return num2;
  }
  else{
    return gcd(num2 , num1 % num2);
  }
}

int lcm(int num1 , int num2){
  return num1 * num2 / gcd(num1 , num2);
}

int main(void) {
  srand(time(NULL));

    int val1 = 0;
    int val2 = 0;
    int answer;

    while(1) {
        printf("Enter two value:");
          scanf("%d" , &val1);
            if(val1 == 0){
                printf("Quit the program\n");
                break;
            }
          scanf("%d" , &val2);
            if(val2 == 0){
                printf("Quit the program\n");
                break;
            }

            printf("The GCD of %d and %d is %d\n" , val1 , val2 , gcd(val1 , val2));
            printf("The LSM of %d and %d is %d\n" , val1 , val2 , lcm(val1 , val2));

    }
  return 0;
}
chex5563 commented 3 months ago
#include <stdio.h>
/*顯示======================================
求兩數的最大公因數和最小公倍數
請輸入第一個整數:XXX
請輸入第二個整數:XXX

計算結果:
14 和 35 的最大公因數:7
14 和 35 的最小倍數是:70*/
int main(void) {
  int number1,number2,max;
  int numbers0=0,numbers1=2,numbers2=2;
  int i=2,j=2,k=2;
  printf("求兩數的最大公因數和最小公倍數\n");
  printf("請輸入第一個整數:");
  scanf("%d",&number1);
  printf("請輸入第二個整數:");
  scanf("%d",&number2);
  while(1){
    if (number1%j==0){
      numbers1=(number1/j);
      break;
    }else{
      j++;
    }
  }
  //printf("第一最大公因數=%d\n",numbers1);
  while(1){
    if (number2%k==0){
      numbers2=(number2/k);
      break;
    }else{
      k++;
    }
  }
  //printf("第二最大公因數=%d\n",numbers2);
  max=numbers1;
  if (numbers2>max){
    max=numbers2;
  } 
  printf("兩數中最大公因數=%d\n",max);
  while(i<=max){
    //printf("i=%d\n",i);
    if (number1%i==0 && number2%i==0){
      if (number1%i==0 && number2%i==0){
        if (numbers0<i){
          numbers0=i;
          //printf("公因數=%d\n",numbers0);
        }
      }
    }
    ++i;
  }
  if (numbers0==0){
    printf("兩數無公因數=1\n");
    printf("最小公倍數=%d\n",number1*number2);
  }else{
    printf("最大公因數=%d\n",numbers0);
    printf("最小公倍數=%d\n",numbers0*(number1/numbers0)*(number2/numbers0));
  }
  return 0;
}
createcube commented 3 months ago
/*gcd(18,48)時,先將48除以18得到商2、餘數12,然後再將18除以12得到商1、餘數6,再將12除以6得到商2、餘數0,即得到最大公因數6。我們只關心每次除法的餘數是否為0,為0即表示得到答案。*/
/*最小公倍數為兩數相乘除以兩數最大公因數*/
#include <stdio.h>

int main(void) {
  int a,b; // a,b為輸入的正整數
  int max,min; //max,min判斷正整數大小
  int re, re2; //re為餘數
  int lcm; //最小公倍數
  printf("求兩數的最大公因數和最小公倍數\n");
  printf("請輸入兩個正整數a,b:");
  scanf("%d,%d", &a, &b);

  if(a>b){
    max=a;
    min=b;
    re = max % min;
    while(re!=0){
      re2 = min % re;
      min =re;
      re = re2;
    }
  }else{
    max=b;
    min=a;
    re = max % min;
    while(re!=0){
      re2 = min % re;
      min =re;
      re = re2;
    }
  }
  lcm = (a*b)/min;
  printf("%d和%d的最大公因數為%d", a, b, min);
  printf("\n%d和%d的最小公倍數為%d", a, b, lcm);

  return 0;
}
charlywang11 commented 3 months ago

設計一個程式,可以由鍵盤輸入兩個數值,並求出這2個數值的最大公因數和最小公倍數

#include <stdio.h>

int main(void) {
  int num1, num2, min;
  printf("求兩數的最大公因數和最小公倍數\n請輸入第一個整數:");
  scanf("%d", &num1);
  printf("請輸入第二個整數:");
  scanf("%d", &num2);
  //最大公因數一定整除兩數,選最小的開始遞減
  if (num1<num2) {
    min=num1;
  }else{
    min=num2;
  }
    for (int gcd=min+1; gcd>0; gcd--){
    if (num1%gcd == 0 && num2%gcd == 0){
      printf("%d 和 %d 的最大公因數:%d\n", num1, num2, gcd);
      //最大公因數 * 最小公倍數 = 兩數相乘
      int lcm = num1*num2/ gcd;
      printf("%d 和 %d 的最小倍數是:%d\n", num1, num2, lcm);
      break;
    }
  }
  return 0;
}

image