解方程 题解

解方程

https://ac.nowcoder.com/acm/contest/5600/G

二分求解
因为Math.log用成了Math.log10而wa了10发。
注意一下当精度特别高的时候就跳出循环 否则会tle

import java.util.*;
import java.math.*;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.io.OutputStreamWriter;
import java.io.BufferedReader;
import java.io.PrintWriter;
public class Main {
    public static HashMap<Integer,Long>map = new HashMap<>();
    public static void main(String args[])throws IOException {
        StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));
        in.nextToken();
        int a = (int)in.nval;
        in.nextToken();
        int b = (int)in.nval;
        in.nextToken();
        int c = (int)in.nval;
        double l=0,r=1000000009,mid=(l+r)/2.0;
        while(l<=r)
        {
            mid=(l+r)/2.0;
            if(r-l<=0.00000001)
            {
                out.print(String.format("%.7f",l));
                break;
            }
             
            if(Math.pow(mid,a)+b*Math.log(mid)==c)
            {
                out.print(String.format("%.7f",mid));
                break;
            }
            else if(Math.pow(mid,a)+b*Math.log(mid)<c)
                l = mid;
            else if(Math.pow(mid,a)+b*Math.log(mid)>c)
                r = mid;
        }
        out.flush();
    }
}


全部评论

相关推荐

10-11 17:45
门头沟学院 Java
走吗:别怕 我以前也是这么认为 虽然一面就挂 但是颇有收获!
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务