澳门新葡亰平台官网C_列出真分数序列

by admin on 2020年1月30日

按依次增加顺序依次列出全部分母为40,分子小于40的最简分数。

求大肆七个正整数的最大公约数和(GCD卡塔尔和最小公倍数(LCM卡塔尔(قطر‎

Problem Description

*难题浅析与算法设计
对成员选用穷举法,利用最大契约数的艺术,判别分子与40是还是不是构成真分数。

*主题素材深入分析与算法设计
手工业方式求三个正整数的蝚大契约数的秘诀是用辗转相除法,在前后相继中得以依样画葫芦这种方法。

Ray
在数学课上听老师说,任何小数都能代表元素数的格局,他起来了化了起来,不慢他就完了了,但他又想到三个主题材料,怎样把四个循环小数化成分数呢?

*次第表明与注释
#include<stdio.h>
int main()
{
int i,num1,num2,temp;
printf(“The fraction serials with demominator 40 is:n”);
for(i=1;i<=40;i++) /*穷举40以内的全体成员*/
{
num1=40;
num2=i;
while(num2!=0) /*利用辗转相除法求出最大公约数*/
{
temp=num1%num2;
num1=num2;
num2=temp;
}
if(num1==1) /*若最大公约数为1,则为最简真分数*/
printf(“%d/40 “,i);

*程序表明与注释
#include<stdio.h>
int main()
{
int a,b,num1,num2,temp;
printf(“Input a & b:”);
scanf(“%d%d”,&num1,&num2);
if(num1>num2) /*找出八个数中的异常的大值*/
{
temp=num1; num1=num2; num2=temp; /*换到多个整数*/
}
a=num1; b=num2;
while(b!=0) /*行使辗转相除法求最大协议数*/
{
temp=a%b;
a=b;
b=temp;
}
printf(“The GCD of %d and %d is: %dn”,num1,num2,a);
/*输出最大公约数*/
printf(“The LCM of them is: %dn”,num1*num2/a); /*出口最小公倍数*澳门新葡亰平台官网,/
}

请你写叁个程序不但能够将日常小数化成最简分数,也得以把循环小数化成最简分数。

}
}

*运转结果
1.Input a & b: 20 55
The GCD of 20 and 55 is: 5
The LCM of them is: 220

Input

*运作结果
The fraction serials with demominator 40 is:
1/40 3/40 7/40 9/40 11/40 13/40 17/40 19/40
21/40 23/40 27/40 29/40 31/40 33/40 37/40 39/40

2.Input a & b: 17 71
The GCD of 17 and 71 is: 1
The LCM of them is: 1207

率先行是多少个大背头N,表示某个许组数据。

*思考题
按递增顺序依次列出全数分母小于等于40的最简真分数

3.Input a & b: 24 88
The GCD of 24 and 88 is: 8
The LCM of them is: 264

每组数据唯有三个纯小数,也便是整数局地为0。小数的位数不当先9位,循环部分用(卡塔尔(قطر‎括起来。

4.Input a & b: 35 85
The GCD of 35 and 85 is: 5
The LCM of them is: 595

Output

*思考题
求贰个微小的正整数,这一个正整数被任意n(2<=n<=10卡塔尔除都是除不尽的,况兼余数总是(n-1卡塔尔国。譬如:被9除时的余数为8。须要规划叁个算法,不许枚举与除2、除3、….、除9、除10有关的命令,求出那一个正整数。

对种种一呼百应的小数化成最简分数后输出,占后生可畏行。

Sample Input

3 0.(4) 0.5 0.32(692307)

Sample Output

4/9 1/2 17/52

将叁个小数也许循环小数转变为分数,需求数学方面包车型客车学问。

参见百度宏观:Infiniti循环小数化分数,

里头的公式法比较符合写程序:

纯循环

用9做分母,有多少个循环数就多少个9,比方0.3,3的循环正是9分之3,0.654,654的轮回就是999分之654,
0.9,9的大循环正是9分之9(1),就那样推算。

混循环

例:把混循环小数0.123˙68˙化成分数:

解:0.123˙68˙=(0.12368+0.00000˙68˙)

=(12368/100000)+(68/9900000)

=[(12368/99000)-(12368/990000)]+(68/9900000)

=(12368/99000)+[(68/9900000)-(12368/9900000)]

=(12368/99000)-(12300/9900000)

=(12368-123)/99000

公式

用9和0做分母,首先有二个循环节有几个人数字就多少个9,接着有多少个没介入循环的数就加多少个0,再用第二个循环节早先的小数部分组成的数与小数部分中不循环部分构成的数的差做分子,例如0.43,3的循环,有一位数没插手循环,就在9前边加贰个0做分母,再用43减4做分子,得
90分之39,0.145,5的巡回就用9前面加2个0做分母,再用145减14做分子,得900分之131,0.549,49的轮回,就
用99后头加1个0做分母,用549减5做分子,最终得990分之545,就那样类推,能约分的要化简。

故而得以算出分子分母,最终约分就可以,须求用到最大公约数的算法。

C代码如下,已经过:

#include “stdio.h”

int maxgongyueshu(int a,int b)

{

int c;

if(a < b)

{

c=a;

a=b;

b=c;

}

c=a%b;

while(c != 0)

{

a=b;

b=c;

c=a % b;

}

return b;

}

int main()

{

int n;

scanf(“%d”,&n);

while(n–)

{

char a[20];

scanf(“%s”,a);

int i=2,temp1=0,temp2=0,p1=0,p2=0,ans1=0,ans2=0;

while(a[i] != ‘’)

{

if(a[i] == ‘(‘)

{

p1=i;

}

else if(a[i] == ‘)’)

{

p2=i;

}

else

{

if(p1==0)

{

temp1=temp1*10+a[i]-‘0’;

}

else

{

temp2=temp2*10+a[i]-‘0’;

}

}

i++;

}

// printf(“%d %d %d %dn”,temp1,temp2,p1,p2);

if(temp1==0)

{

ans1=temp2;

ans2=1;

for(i=p1;i < p2-1;i++)

ans2=ans2*10;

ans2–;

for(i=2;i < p1;i++)

ans2*=10;

}

else if(temp2==0)

{

ans1=temp1;

ans2=1;

for(i=2;a[i]!=’’;i++)

ans2=ans2*10;

}

else

{

ans1=temp1;

for(i=p1;i < p2-1;i++)

ans1=ans1*10;

ans1=ans1+temp2-temp1;

ans2=1;

for(i=p1;i < p2-1;i++)

ans2=ans2*10;

ans2–;

for(i=2;i < p1;i++)

ans2*=10;

}

i=maxgongyueshu(ans1,ans2);

ans1=ans1/i;

ans2=ans2/i;

printf(“%d/%dn”,ans1,ans2);

}

}

/ * for test

0.368(616)

0.0105(717)

0.(18)

0.(168)

0.(1787)

0.0(869)

0.00(716)

0.36767

0.66558698

0.0687

0.0065

46031/124875

8801/832500

2/11

56/333

1787/9999

869/9990

179/24975

36767/10000

33279349/50000000

687/10000

13/2000

* /

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图