声明:摘选自“ 算法竞赛入门经典(第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,进位,否则不变
}
}