质数因子、取近似值 题目

❤HJ6 质数因子

描述

功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )

数据范围: 1≤𝑛≤2×109+14 1≤n≤2×109+14

输入描述:

输入一个整数

输出描述:

按照从小到大的顺序输出它的所有质数的因子,以空格隔开。

示例:

输入:180
输出:2 2 3 3 5

 

分析:

​ 1.先求质数。

 

代码:

没写出来!!丢脸!!


 
 

 

大佬代码:

一边求素数,一边用求的素数计算因子。

import java.util.Scanner;


public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        long num = sc.nextLong();
        long k = (long) Math.sqrt(num);

        for (long i = 2; i <= k; ++i) {
            while (num % i == 0) {
                System.out.print(i + " ");
                num /= i;
            }
        }
        System.out.println(num == 1 ? "": num+" ");

    }

}

 
 

递归!但是方法超时。

import java.util.Scanner;
public class Main {
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        long num = Long.parseLong(scan.next());
        getPrimer(num);
    }
 
    public static void getPrimer(long num){
        for (int i= 2;i <= num; i++){
            if (num % i==0){
                System.out.print(i + " ");
                getPrimer(num/i);
                break;
            }
            if (i==num){
                System.out.print( i + "");
            }
        }
    }
}

 
 

短除法。

import java.util.*;
public class Main{
    public static void main(String[] args) {
        // 处理输入
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            // 获取需要求解的值
            int target = sc.nextInt();
            int y = 2;// 因子从2开始算
            while(target != 1){ // 短除法,除到目标值为1为止
                if(target % y == 0) // 能能够整除2
                {
                    System.out.print(y+" ");
                    target /= y;
                }else{// 更新y的值
                    if(y > target / y) y = target;
                    else y++;
                }
            }
        }
    }
}

 
 
 
 

HJ7 取近似值

描述

写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于 0.5 ,向上取整;小于 0.5 ,则向下取整。

数据范围:保证输入的数字在 32 位浮点数范围内

输入描述:

输入一个正浮点数值

输出描述:

输出该数值的近似整数值

示例:

输入:5.5
输出:6

说明:0.5>=0.5,所以5.5需要向上取整为6  
输入:2.499
输出:2

说明:0.499<0.5,2.499向下取整为2 

 
 

分析:

​ 1.使用round函数(四舍五入函数)

​ 2.求小数点后面那一位是否大于5。

 

代码:

方法一:使用round函数(四舍五入函数)

import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        double num=sc.nextDouble();
        if(num<=0 &&num>Float.MAX_VALUE){
            System.out.println("非法输入!");
            return;
        }
        long num1=Math.round(num);
        System.out.println(num1);
    }
}

 
 

方法二:求小数点后面那一位是否大于5

import java.util.*;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        double num=sc.nextDouble();
        if(num<=0 &&num>Float.MAX_VALUE){
            System.out.println("非法输入!");
            return;
        }
        int key= (int)(num*10%10);
        //System.out.println(key);
        long num1;
        if(key>=5){
            //System.out.println(((long)num));
            num1=((long)num)+1;
        }else {
            num1=(long)num;
        }

        System.out.println(num1);
    }
}

 

 

大佬代码:

大佬的脑子怎么长的!!分我亿点点!

import java.util.Scanner;
public class Main {
 
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        double number = in.nextDouble();
        System.out.println((int)(number + 0.5));
    }
}

 
 
 

普通解法。

/**
*最笨、最简单、最直接的方法
*/
import java.util.Scanner;
 
public class Main{
     public static void main(String[] args){
           Scanner scan = new Scanner(System.in);
            float f = scan.nextFloat();   //获取输入的值:2.8
            float d = f- (int) f;        //获取小数部分:2.8-2=0.8
            int i = (int)f;               //获取整数部分:2
            if(d>=0.5){               //拿小数部分与0.5进行比较,大于等于让整数部分+1,反之,直接输出整数部分
                System.out.println(i+1);
            }else{
                System.out.println(i);
            }
     }
}
  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值