每日一题(01.07)

Description:

请你编程求出 ∑ i = 0 k ( − 1 ) i C k i 2 i + 1 \sum_{i=0}^{k}\frac{(-1)^iC_k^i}{2i+1} i=0k2i+1(1)iCki的值。

Input:

多行输入,每行一个正整数k。输入0结束程序。

Output:

表达式的值,格式见Sample。

Sample Input:

1
3
7
0

Sample Output:

2/3
16/35
2048/6435

Reference Code

#include <iostream>
#include <vector>
using namespace std;
vector<int> fac_storage={1};
int factorial(int n){
	int len=fac_storage.size();
	if (len<=n){
		fac_storage.push_back(fac_storage.back()*len);
		return factorial(n);
	}
	else
		return fac_storage[n];
}
int combination(int n,int m){
	return factorial(n)/factorial(m)/factorial(n-m);
}
struct fraction{
	int molecule;
	int denominator;
};
struct fraction add(struct fraction a,struct fraction b){
	struct fraction ans;
	ans.molecule=a.denominator*b.molecule+a.molecule*b.denominator;
	ans.denominator=a.denominator*b.denominator;
	for (int i=2;i<=ans.denominator || i<=ans.molecule;i++){
		while (ans.denominator%i==0 && ans.molecule%i==0){
			ans.denominator/=i;
			ans.molecule/=i;
		}
	}
	return ans;
}
int sign(int n){
	if (n%2==0) return 1;
	else return -1;
}
struct fraction solve(int k){
	struct fraction ans;
	ans.denominator=1;
	ans.molecule=0;
	for (int i=0;i<=k;i++){
		struct fraction buf;
		buf.molecule=sign(i)*combination(k,i);
		buf.denominator=2*i+1;
		ans=add(ans,buf);
	}
	return ans;
}
int main(){
	int k;
	while (cin>>k && k){
		struct fraction buf=solve(k);
		cout<<buf.molecule<<"/"<<buf.denominator<<endl;
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值