• 算法竞赛入门经典 习题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;
    } 
    
  • 相关阅读:
    获取DataGrid数据
    C# 分頁
    TCP 协议
    node fs对象
    ANSI转义码 改变输出的字体颜色
    异步流程控制模式
    node event对象
    js中的异常捕获 try{} catch{}(二)
    node require 文件查找的顺序
    node process全局对象
  • 原文地址:https://www.cnblogs.com/serendipity-my/p/12632505.html
Copyright © 2020-2023  润新知