1. 程式人生 > >用C語言編寫程式:求兩數的最大公約數。

用C語言編寫程式:求兩數的最大公約數。

此程式用了3個方法(相減法、窮舉法、輾轉相除法)來求兩數的最大公約數,使用者可自己選擇用哪種演算法。

#include<stdio.h>
#include<stdlib.h>
int select=1;//select 為是否退出系統的標記
void subtract()
{
	int a,b;
	printf("請輸入兩個資料:\n");  
	scanf("%d %d", &a, &b); 
	while(a!=b)//用大數減小數直到差和減數相同,輸出最大公約數
	{
		if(a>b) a=a-b;
		else b=b-a;
	}
   printf("最大公約數為%d。\n", a);  
		   
}
void divide()//輾轉相除法
{	
	int a, b, c;  
	printf("請輸入兩個資料:\n");  
	scanf("%d %d", &a, &b);  
	while(b!=0)  //當餘數為0時跳出迴圈	
	{ 
		c=a%b; 
		a=b; 
		b=c;
	}  
	printf("最大公約數為%d。\n", a);  
	
}
void exhaustion()//窮舉法求最大公約數
{
	int a,b,c;
	printf("請輸入兩個資料:\n");  
	scanf("%d %d", &a, &b);  
	for(c=a;c>0;c--)
		if(a%c==0&&b%c==0)//第一次可以整除的數為最大公約數
		{
			printf("最大公約數為%d。\n",c);
			break;//獲得最大公約數就跳出迴圈
		}
}
void menu()//初始介面
{
	int i;
	printf("\n");
	printf("                          求兩數的最大公約數演算法                   \n");
	printf("           ********************************************************\n");
	printf("           *                     請選擇演算法:                     *\n");
	printf("           *              0.相減法。      1.相除法。              *\n");
	printf("           *              2.窮舉法。      3.退出程式。            *\n");
	printf("           ********************************************************\n");
	
	scanf("%d",&i);
	switch(i)
	{
	case 0:
		subtract();break;
	case 1:
		divide();break;
	case 2:
		exhaustion();break;
	case 3:
		select =0;break;
	default:
		printf("請在0-3之間選擇\n");
	}
}
int main()
{ 
	while(select)
	{
		menu();
	}
	system("pause");
	return 0;
} 



相關推薦

C語言編寫程式大公約數

此程式用了3個方法(相減法、窮舉法、輾轉相除法)來求兩數的最大公約數,使用者可自己選擇用哪種演算法。 #include<stdio.h> #include<stdlib.h> int select=1;//select 為是否退出系統的標記 voi

使用C語言編寫程式任意個整數的較大值

#define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #define max(a,b)((a>b?a:b)) int main() {

輸入一行字元分別統計出其中英文字母、空格、數字和其他字元的個數c++語言編寫程式)【寫的第1篇部落格,很高興

#include<stdio.h> int main() { char ch; //定義ch為字元型變數 int a=0,b=0,c=0,d=0; //定義a,b,c,d為整型變數並賦初值 while(scanf("%c",&ch),ch!=’\n’) //輸入字元直到c

Java語言編寫程式輸出100以內的素數

                                          &nb

C語言個函式,分別大公約數小公倍數

題目:寫兩個函式,分別求兩個整數的最大公約數和最小公倍數,用主函式呼叫這個兩個函式,並輸出結果。兩個整數由鍵盤輸入 分析:求最大公約數,需要用到輾轉相除法: 輾轉相除法:設兩數為a、b(a>b

Problem B: C語言習題5.17--的商

Problem B: C語言習題5.17--求兩數的商 Time Limit: 1 Sec  Memory Limit: 128 MB Description a/b計算商固然簡單方便,可如果商是無限小數或很長位數小數的情況,你該如何求指定位數的商呢?編寫函式

1.交換值內容 2.不創建臨時變量交換只內容 3.十個數中的大值 4.講三個數由大到小輸出 5.個數大公約數

www. 最大公約數 十個 following .com blank 臨時變量 lan follow 露x都對貝姨芽沽1才39賢http://www.facebolw.com/space/2104128 ZP鋪巢嗣3瀉HX7Dhttp://www.facebolw.com

個數大公約數

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<stdlib.h> void main() { int a,b,i; printf("請輸入2個整數\n"); scanf("%d%d", &

你所必須知道的三種基本個數大公約數的演算法

1 迭代法求最大公約數 /*迭代法求最大公約數 *原理:m n r;將r賦值給n,n賦值給m */ #include <iostream> using namespace std; int Gcd(int m, int n) { int r; r =

呼叫函式個數大公約數小公倍數

1. /* 2. * Copyright (c) 2012, 煙臺大學計算機學院 3. * All rights reserved. 4. * 作 者: 呂建 5. * 完成日期:

輾轉相除法、相減法自然數大公約數小公倍數

l 輾轉相除法 演算法描述: 輾轉相除法是求兩個正整數的最大公約數的一種演算法. 有兩整數a和b:  ① a%b得餘數c  ② 若c=0,則b即為兩數的最大公約數  ③ 若c≠0,則a=b,b=c,再

python實現遞迴和非遞迴個數大公約數小公倍數

    最大公約數和最小公倍數的概念大家都很熟悉了,在這裡就不多說了,今天這個是因為做題的時候遇到了所以就寫下來作為記錄,也希望幫到別人,下面是程式碼: #!/usr/bin/env python #coding:utf-8 from fractions import gc

歐幾里德演算法(大公因數)

     兩個整數的最大公因數(gcd)是同時整除兩個大最大整數。即gcd(50,15)=5.      演算法連續計算餘數直到除數為0,最後的非0餘數就是最大公因數。因此若M=1989,N=1590

大公約數

兩數最大公約數 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main(){ int a, b; printf("請輸入兩個數a和b分別為:"); scanf("%d,%d", &a, &b)

c語言編寫n的k次方函式,迭代和遞迴種方法

在c語言中求n的k次方函式。雖然c語言中庫函式中已經存在,但是知道它的程式碼或者實現思想也是很必要的。那麼我們用兩種方式來實現:第一種:迭代法(效率在資料量比較大時要相比遞迴快一點)int power_ineration(int n,int k)//迭代 { int q =

使用C語言編寫程式,求解有一分數序列2/1,3/2,5/3,8/5,13/8,21/13...出這個序列的前20項

使用C語言編寫程式,求解有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個序列的前20項 void test() {  //思路:找規律->從3/2開始 下一個數的分

C#語言編寫組分析器

find 操作 fin numbers 排序 ole class 數字 輸入 static void Main(string[] args) { #region 創建數組 Console.Write("請輸入數組的

C#語言編寫集合管理器

list 管理 main 繼續 console reac 提示 回車 read static void Main(string[] args) { List<int> numbers = new List<int>

C語言編寫一個輸出大值的程式

void main(){int a,b,c,max;scanf("%d%d%d",&a,&b,&c); if(a>b)max=a;elsemax=b; if(c>max)max=c;printf("max is %d",max);getch

c語言編寫個數的交換,三種方法

下面是從函式角度,還有簡單的交換 法去實現兩個數的交換。其中函式用到指標,通過前兩種方法可以深刻的體會到指標變得的含義。 #include <stdio.h> void swap(int *a,int *b) {   int temp;     temp=*a;