题目

    1/1+1/2+1/4+1/8+...

    每项是前一项的一半,如果一共有 20项,求这个和是多少,结果用分数表示出来。

    类似:3/2,当然,这只是加了前 2 项而已。分子分母要求互质。

思路

    ②等比数列公式(幂级数),求最大公约数

    ③快速幂运算,求最大公约数


求最大公约数公共代码方法一:

#include <iostream>
using namespace std;
int measure(int x, int y)
{	
	int z = y;
	while(x%y!=0)
	{
		z = x%y;
		cout<<z<<endl;
		x = y;
		y = z;	
	}
	return z;
}

int main()
{
    
    int max = measure(12,5);
    std::cout << max << std::endl;
    return 0;
}

求最大公约数公共代码方法二(递归):

#include <iostream>
using namespace std;
int measure(int x, int y)
{	
	if(y==0) return x;
	return measure(y,x%y);
}

int main()
{
    
    int max = measure(12,4);
    std::cout << max << std::endl;
    return 0;
}


代码一:使用函数库求幂

#include <iostream>
#include<math.h>
using namespace std;
int main()
{
  long  numerator = pow(2,20)- 1;
  long denominator = pow(2,19);
  cout<<numerator<<"/"<<denominator<<endl;
  return 0;
}

代码二:快速幂运算实现pow()

#include <iostream>
using namespace std;

int measure(int x, int y)
{	
	if(y==0) return x;
	return measure(y,x%y);
}

int pow_f(int base_num,int y){
    int res = 1;
    int x = base_num;
    while(y > 0){
        if(y&1){
            res *= x;
        }
        y>>=1;
        x *=x;
    }
    return res;
    
}

int main()
{
    int gcd = measure(pow_f(2,20)-1,pow_f(2,19));
    if(gcd == 1){
        cout<<pow_f(2,20)-1<<"/"<<pow_f(2,19)<<endl;
    }
    else{
        cout<<(pow_f(2,20)-1) / gcd<<"/"<<pow_f(2,19) / gcd<<endl;
    }
    
    
    return 0;
}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论