xqzz.net
当前位置:首页 >> 用C语言编写辗转相除法求最大公约数,出现Bug,,... >>

用C语言编写辗转相除法求最大公约数,出现Bug,,...

问题的症结在于mod初值为1时保证了第一次循环运算正确,第二次循环时mod的初值就为0了,所以不再进行while的体循环判断了.在printf("\n“若退出,请输入1,否则重复运行,请输入其他数”,\n输入数值:");前加一句mod=1;就可以

你这个程序编的也太复杂了吧只需要修改一个地方就行了.#includeintmain(){inta,b,temp;printf("请输入两个正整数:\n");scanf("%d%d",&a,&b);if(a==b)//error:a=bprintf("最大公约数是:%d\n",a);else{if(avoidmain(){inta,b,c;printf("inputtwonumber:");scanf("%d%d",&a,&b);c=a%b;while(c>0){a=b;b=c;c=a%b;}printf("最大公约数为:%d\n",b);}

int divisor (int a,int b) /*自定义函数求两数的最大公约数*/ { int temp; /*定义整型变量*/ if(a<b) /*通过比较求出两个数中的最大值和最小值*/ { temp=a; a=b; b=temp; } /*设置中间变量进行两数交换*/ while(b!=0) /*通过循环求两数的余数,直到余数为0*/ { temp=a%b; a=b; /*变量数值交换*/ b=temp; } return a; /*返回最大公约数到调用函数处*/ }

可用递归来求.推荐以下代码:#include<stdio.h>int gcd(int a,int b) //求最大公约数函数{ if (a%b==0) return b; else return gcd(b,a%b); //辗转相除法}void main(){ int a,b; scanf("%d%d",&a,&b); printf("%d\n",gcd(a,b));}

#include int gcd(int n,int m) { /**********Program**********/ int t; if ( m>n ) { t=m;m=n;n=t; } t=n%m; while (t) { n=m; m=t; t=n%m ; } return m;/********** End **********/ }

不用辗转相除,只需要根据数学定义,找出最大的可以同时整除两个数值,即为最大公约数.代码如下:int gcd(int a,int b)//求a,b的最大公约数,并返回.{ int r = a>b?b:a; while(r) { if(a%r==0 && b%r==0)break;//最大的可以同时整除二者的数,即为最大公约数. r--; } return r; }

#include <stdio.h> int main() { int a, b; scanf("%d%d", &a, &b); while (b!=0){ r = b; b = a; a = a % r; } printf("%d\n", a); return 0; }

可用递归来求.推荐以下代码:#include int gcd(int a,int b) //求最大公约数函数 { if (a%b==0) return b; else return gcd(b,a%b); //辗转相除法 } void main() { int a,b; scanf("%d%d",&a,&b); printf("%d\n",gcd(a,b)); }

main(){ int a,b,num1,num2,temp; printf("please input two numbers:\n"); scanf("%d,%d",&num1,&num2); if(num1<num2)/*交换两个数,使大数放在num1上*/ { temp=num1; num1=num2; num2=temp; }a=num1;b=num2;while(b!=0)/*利用辗除法,直到b为0为止*/ { temp=a%b; a=b; b=temp; }printf("gongyueshu:%d\n",a);printf("gongbeishu:%d\n",num1*num2/a);}

网站首页 | 网站地图
All rights reserved Powered by www.xqzz.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com