• sgu 154 二分 + 数学方法 sgu 111 二分 + 高精度 (Java)


    /*
    * sgu154.c
    *
    * Created on: 2011-10-1
    * Author: bjfuwangzhu
    */

    #include<stdio.h>
    #define nnum 5
    #define nmax 0x7fffffff
    int getNum(int n) {
    int res;
    res = 0;
    while (n) {
    res += n / nnum;
    n /= nnum;
    }
    return res;
    }
    void solve(int n) {
    int left, right, mid, temp;
    left = 0, right = nmax;
    while (left <= right) {
    mid = (left + right) >> 1;
    temp = getNum(mid);
    if (temp >= n) {
    right = mid - 1;
    } else {
    left = mid + 1;
    }
    }
    if (getNum(left) == n) {
    printf("%d\n", left);
    return;
    }
    puts("No solution");
    }
    int main() {
    #ifndef ONLINE_JUDGE
    freopen("data.in", "r", stdin);
    #endif
    int n;
    while (~scanf("%d", &n)) {
    if (n == 0) {
    puts("1");
    continue;
    }
    solve(n);
    }
    return 0;
    }

    import java.io.BufferedInputStream;
    import java.math.BigInteger;
    import java.util.Scanner;

    public class Solution {
    public static void main(String[] args) {
    Scanner cin = new Scanner(new BufferedInputStream(System.in));
    BigInteger num, left, right, mid, two = BigInteger.valueOf(2), one = BigInteger.ONE;
    while (cin.hasNext()) {
    num = cin.nextBigInteger();
    left = BigInteger.ZERO;
    right = num.abs().add(one);
    while (left.compareTo(right) <= 0) {
    mid = left.add(right).divide(two);
    if (mid.multiply(mid).compareTo(num) >= 0) {
    right = mid.subtract(one);
    } else {
    left = mid.add(one);
    }
    }
    while (left.multiply(left).compareTo(num) > 0) {
    left = left.subtract(one);
    }
    System.out.println(left);
    }
    }
    }

  • 相关阅读:
    oracle基于事件的调度简单学习
    ALTER SEQUENCE
    初识oracle嵌套表
    关于索引失效的一点学习
    Oracle的job用法简单小结
    oracle中的FLASHBACK TABLE 和查询闪回的一点认识
    数据库事务的学习(二)
    电动车驱动力与行驶阻力平衡图.png
    matlab 等高线contour
    IPMSM弱磁控制策略
  • 原文地址:https://www.cnblogs.com/xiaoxian1369/p/2197003.html
Copyright © 2020-2023  润新知