设计一个算法,输入正整数a,b(a>b),用辗转相除法求这两正整数的最大公约数,要求画出程序框图和写出
辗转相除法,是求两个正整数之最大公因子的算法。
辗转相除法的算法过程如下:设两数为a、b(a>b),求a和b最大公约数(a,b)的步骤如下:用a除以b,得
a÷b=q,余数r1(0≤r1)。若r1=0,则(a,b)=b;若r1不等于0,则再用b除以r1,得b÷r1=q,余数r2
(0≤r2).若r2=0,则(a,b)=r1,若r2不等于0,则继续用r1除以r2,如此下去,直到能整除为止,其最后一个为被除数的余数的除数即为
(a, b)。
具体事例代码如下:
public class Demo2 {
public static void main(String[] args) {
int a = 49,b = 91;
while(b != 0) {
int yushu = a % b; //记录余数
a = b; //将b值赋给a值
b = yushu; //将余数赋给b值
}
System.out.println(a);
}
}
辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。
可以参考下面的代码:
#include
int main()
{
int m, n, r;
scanf ("%d%d", &m, &n);
if (m>n){r=m, m=n, n=r;}
r=n%m;
while (r!=0){
n = m;
m = r;
r = n%m;
}
printf ("%d
", m);
return 0;
}
扩展资料:
函数 scanf() 是从标准输入流stdin(标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。
函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。
参考资料来源:百度百科-scanf (计算机语言函数)
参考资料来源:百度百科-while (循环语句及英文单词)
程序如下:
INPUT a,b
DO
r=a MOD b
a=b
b=r
LOOP UNTIL r=0
PRINT a
END
已知a,b属于正整数,a+b=10,设计一个算法,求出ab的最大值,写出伪代码
ab=a(10-a) =10a-a^2 =-(a^2-10a+25)+25 =-(a-5)^2+25 当a=5时,上式可取到最大值,最大值为25
ab为正整数且a+b=100设计一个算法求使ab取最大值的ab的值
b=100-a ab=a(100-a)=-a方+100a=-a方+100a-2500+2500 =-(a方-100a+2500)+2500 =-(a-50)方+2500 因此a=b=50 ab最大值为2500 我当算术题来做了,编程也一样,你用什么语言?
编写一个程序,对输入的一组整数,分别统计其中正整数和负整数的个数(0...
源程序代码以及算法解释如下:include <iostream> using namespace std;int main(){ int i = 0;\/\/正整数个数 int j = 0;\/\/负整数个数 int number;\/\/整数变量 cout << "请输入数字以回车分开,且以0结束:" << endl;\/\/文字提示 cout << endl;while (1)\/\/循环以0结束 { cin >> ...
输入三个整数a,b,c设计一个算法使得输入的三个整数按从小到大的次序分别...
用C++编写:include<iostream> using namespace std;int main(){ int a,b,c,temp;cout<<"请输入三个数:";cin>>a>>b>>c;cout<<"排序之前的值为:";cout<<"a="<<a<<" b="<<b<<" c="<<c<<endl;if(a>b){ temp=a;a=b;b=temp;} if(a>c){ temp=a;a=c;c=temp;} ...
C语言输入n个正整数,求他们的最大公约数和最小公倍数
最大公约数用欧几里得算法,比如输入 a 和 b ,求得最大公约数是 c,那么最小公倍数就是 ( a * b \/ c )参考代码如下:include<stdio.h> int gcd( int a, int b ){ if ( b == 0 )return a;else return gcd( b, a % b );} int main(){ int a, b, c;printf( "Input...
一道c语言的题目:计算a、b之间所有奇数的和
一、算法分析:要计算a b之间所有奇数和,那么最朴素的算法可以设计如下:1、输入a,b值;2、循环遍历a b之间的所有数值,如果为奇数,则累加;3、输出结果。二、算法优化:1、由于连续奇数之间差值为2,所以可以判断出第一个奇数,然后依次加2得到所有奇数,将所有奇数累加即可。2、连续奇数属于等差...
设计一个C语言程序。从键盘上输入a,b,c三个整数,输出其中的最小者
3. 通过一个if-else语句来比较这三个数,找出其中的最小值,并将其赋值给min变量。4. 使用printf函数输出最小值。完整的程序代码如下:<stdio.h> int main() { int a, b, c, min;printf("请输入三个整数:");scanf("%d%d%d", &a, &b, &c);if (a < b) { if (a < c) { ...
C语言程序设计,初级的~设计算法输入一个四位正整数,将它们倒排,例如输 ...
“希望写的详细些,我就可以直接打上去了,连空格啊,标点啊也写一下.”...学习不是这样的。。。给个思路就行了。用除法求出千位、求余再除法求出百位、再除法+求余求出十位,最后用求余得到个位。然后按照个位十位百位千位一个一个输出即可。
用基本语句写一个算法,要求输入20个数,输出其中正数,负数和零的个数
我貌似会 设零的个数为a,正数的个数为b,负数为c,个数总计为d input A1,A2...,A20 I=1 a=0 b=0 c=0 d=1 用Do loop和If语句就行了 本人初三学生党,对Vb懂点 希望能帮到你 可能是对的,也可能是错的,你参考下
输入2个正整数(位数不超过100位),计算它们的差并输出;
大数减法。百度知道有个算法,你改一改输入格式即可。int a[MAXINT]={10,5,4,6,5,4,3,2,1,1,1}; \/\/ 数1112345645,数字位数10 int b[MAXINT]={7,7,6,5,4,3,2,1}; \/\/ 数1234567 数字位数7 a[0] 是 a 数字共有的位数 b[0] 是 b 数字共有的位数 a[1] 是 a 的...