❤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);
}
}
}