首页 > 编程知识 正文

C语言更相减损术,与c语言相比c++减少了一些运算符

时间:2023-05-05 19:15:08 阅读:188335 作者:2720

更相减损法设计

首先这个方法是为了求出两个数字的最大公约数,实现的方法就是:
01:两个数字先进行判断是不是都是偶数,是的话,用2约分。

02: 循环判断直到两个数不同时为偶数的时候进行下一步,比较两个数字的大小,用大的数字减去小的数字,,重复操作,直到减数和差相等,

03:这个时候得出来的差和约去的n 个2的乘积就是最大公约数

设计思路

01:定义一个flag记录约去2的个数
02:使用while循环更相相减

while(a != b){ while(a>b) { a = a -b; } while(b>a) { b = b-a; }}

这里的话实际上用函数写循环更方便,在while(){}里面加上的是if(){}的大小的判断语句,这样一直调用会更好
03:输出控制

代码 /*1.任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步;2.以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。3.第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数*/#include <stdio.h>int main(void) // 2,8 9,12 32,17 {/*-----输入2个整数,输出最大公约数-----------------------*/ int num1,num2; int flag = 0; int temp; int result; scanf("%d %d", &num1, &num2); while((num1%2 == 0) && (num2%2 == 0)) // 表示是偶数 { flag = flag+1; // 记录约去了几个2 num1 = num1 /2; num2 =num2 / 2; } if(num1 > num2) // 1,4 { temp = num1 - num2; while(temp != num2) { while(temp > num2) // 差和较小的数字的比较 { temp = temp - num2; // 差 } while(num2 > temp) { num2 = num2 - temp; } } // 直到跳出了循环的话就说明减数和差的大小相等了 } else //1,4 9,12 { temp = num2 - num1; //3,1 3,9 while(temp != num1) { while(temp > num1) // 差和较小的数字的比较 { temp = temp - num1; // 差 } while(num1 > temp) // 6,3 3,3 { num1 = num1 - temp; } } } if(flag == 0) // 没有进行第一步的话,最后出的结果会是0 { result = temp;}else{for(int t = 1; t<=flag; t++){result = 2* temp; // 与若干个2相乘 }}printf("%d", result);return 0; /*----- -----------------------*/}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。