zoukankan      html  css  js  c++  java
  • 算法竞赛入门经典 习题2-4 子序列的和(subsequence)

    算法竞赛入门经典 习题2-4 子序列的和(subsequence)

    输入两个正整数n<m<106,输出 ,保留5位小数。输入包含多组数据, 结束标记为n=m=0。
    提示:本题有陷阱。
    样例输入:
    2 4
    65536 655360
    0 0
    样例输出:
    Case 1: 0.42361
    Case 2: 0.00001
    因为n,m已经很大了,当有乘法或者平方时,很容易溢出
    有两种解决方法,一种是用long long ,避免溢出
    另一种是不算出i*i的值

    #include<iostream>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    int main()
    {
    	int n,m;
    	while(cin>>n>>m)
    	{
    		if(n==0&&m==0) return 0;
    		double sum=0;
    		for(int i=n;i<=m;i++)
    		{
    			long long r=pow(i,2);
    			sum+=(double)1.0/r;
    		}
    		printf("%.5lf
    ",sum);
    	}
    	return 0;
    } 
    

    //这个输出格式有点问题。。。

    #include<stdio.h>
    int main()
    {
    	int n,m,i,k=0;
    	while(scanf("%d%d",&n,&m)!=EOF)
    	{
    		double sum=0;
    		if(n==0&&m==0)
    		{
    			break;
    		}
    		for(i=n;i<=m;i++)
    		{
    			sum=sum+(1.0/i)/i;//换成i*i会有运算结果溢出//
    		}
    		k++;
    		printf("Case %d: %.5lf
    ",k,sum);
    	}
    	return 0;
    } 
    
  • 相关阅读:
    算法
    什么叫「人的格局」?是否有必要培养大的格局或怎么培养?
    套接字
    信号量 P V测试详解
    Emacs快速入门
    Emacs 从入门到精通
    Linux多进程之间的文件锁
    mysql 登录报错:ERROR 1045 (28000)
    类职责协作模型
    .Netcore使用Session
  • 原文地址:https://www.cnblogs.com/serendipity-my/p/12632505.html
Copyright © 2011-2022 走看看