算法的乐趣c/c++ —— 1.1.2入门习题

声明:摘选自“ 算法竞赛入门经典(第2版)”作者:  刘汝佳  /  陈锋   ISBN:9787302291077

1,子序列的和(亚)

输入两个正整数n <m <106,输出,保留5位小数。输入包含多组数据,结束标记为n = m = 0.提示:本题有陷阱。样例输入:
2 4
65536 655360
0 0

案例输出:
案例1:0.42361
案例2:0.00001

#include<stdio.h>
int main()
{
	int n, m;
	double sum;
	scanf("%d%d", &n, &m);
	for(int i=0; (i+n)<=m; i++)
	{
		sum += (double)1/((i+n)*(i+n));
	}
	printf("%.5f", sum);
	return 0;
}

2,分数化小数(小数) 

输入正整数a,b,c,输出a / b的小数形式,精确到小数点后c位.a,b≤106,c≤100。输入包含多组数据,结束标记为a = b = c = 0 。

样例输入:
1 6 4
0 0 0
样例输出:
案例1:0.1667

#include<stdio.h>
int main()
{
	int a, b, c, Case=1;
	while(3 == scanf("%d%d%d", &a,&b,&c))
	{
		if(a==0 && b==0 && c==0) break;     //只要输入三个数同时为0即停止运算
		int numb = a/b;                     //取整数部分
		a %= b;                             //取余数 
		printf("Case %d %d.", Case++, numb);  //先打印整数部分加上一个小数点例如 1.  或者2. 
		for(int i=1; i<c; i++)
		{
			a *= 10;                        //取小数点后第i位 
			printf("%d", a/b);              //将小数点后第i位打印 
			a %= b;                         //取余数 
		} 
		a *= 10;
		printf("%d\n", (a%b*10/b>5)?(a/b+1):(a/b)); //如果最后一位大于5,进位,否则不变 
	}
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值