OpenJudge NOI 1.2 java解题
以下为本人做的OJ题解
如有不足之处,欢迎大家评论指正。如看过后还有不明白的地方,或有更好的解题方法,欢迎大家在评论区留言讨论。
作者:HEAN
1.2 编程基础之变量定义、赋值及转换
1.2.1 整型数据类型存储空间大小
| 01 | 整型数据类型存储空间大小 |
Integer.SIZE 和 Short.SIZE 分别表示 int 和 short 类型的位数,由于 1 字节等于 8 位,所以将位数除以 8 即可得到存储空间大小(单位:字节)。
/**
* @author HEAN
* time 2024/10/16
*/
public class Main {
public static void main(String[] args) {
int intVar;
short shortVar;
System.out.println( (Integer.SIZE / 8) + " " + (Short.SIZE / 8));
}
}
1.2.2 浮点型数据类型存储空间大小
| 02 | 浮点型数据类型存储空间大小 |
Float.SIZE 和 Double.SIZE 分别表示 float 和 double 类型的位数,由于 1 字节等于 8 位,所以将位数除以 8 即可得到存储空间大小(单位:字节)。
/**
* @author HEAN
* time 2024/10/16
*/
public class Main {
public static void main(String[] args) {
float floatVar;
double doubleVar;
System.out.println((Float.SIZE/8) + " " + (Double.SIZE/8));
}
}
1.2.3 其他基本数据类型存储空间大小
| 03 | 其他基本数据类型存储空间大小 |
Byte.SIZE 和 Character.SIZE 分别表示 boolean 和 char 类型的位数,由于 1 字节等于 8 位,所以将位数除以 8 即可得到存储空间大小(单位:字节)。
char类型在C或C++中占1个字节,在java中占2个字节。本题char还需再除以2
/**
* @author HEAN
* time 2024/10/16
*/
public class Main {
public static void main(String[] args) {
boole booleVar;
char charVar;
System.out.println(D + " " + C);
}
}
1.2.4 填空:类型转换1
| 04 | 填空:类型转换1 |
a = 32768;
b = a;
printf("%d %d\n", a, b);
32768和-32768
在Java中,不同的数据类型有不同的表示范围。以下是Java中主要数据类型的表示范围:
byte:-128 到 127(8 位,有符号)
short:-32768 到 32767(16 位,有符号)
int:-2147483648 到 2147483647(32 位,有符号)
long:-9223372036854775808 到 9223372036854775807(64 位,有符号)
float:大约 ±3.40282347E+38F(32 位,IEEE 754)
double:大约 ±1.79769313486231570E+308(64 位,IEEE 754)
char:'\u0000' 到 '\uffff'(16 位,Unicode)
boolean:true 或 false
这些范围是由数据类型的位数和它们的编码方式(如有符号或无符号)决定的。例如,byte 是 8 位有符号整数,所以它的范围是从 -128 到 127。而 float 和 double 是浮点数,它们的范围是由 IEEE 754 标准定义的。
结合上述知识,输出答案
/**
* @author HEAN
* time 2024/10/16
*/
public class Main {
public static void main(String[] args) {
System.out.println("D" + " " + "C");
}
}
1.2.5 填空:类型转换2
| 05 | 填空:类型转换2 |
a = 1.000000001;
b = a;
printf("%.9f %.9f\n", a, b);
输出两个数:1.000000001 1.000000000
能用%f输出,表示a,b都是浮点型
在Java中,浮点型数据类型(float和double)的表示精度是由其位数决定的。float类型是32位,而double类型是64位。这意味着double类型可以表示的数值范围比float类型更广,并且具有更高的精度。
具体来说,float类型可以表示大约6到7位十进制有效数字,而double类型可以表示大约15到16位十进制有效数字。这是因为float类型使用23位来存储小数部分,而double类型使用52位来存储小数部分。
在实际应用中,如果需要处理非常大或非常小的数值,或者需要更高的精度,那么应该使用double类型。如果你对精度要求不高,或者需要节省内存空间,那么可以使用float类型。
/**
* @author HEAN
* time 2024/10/16
*/
public class Main {
public static void main(String[] args) {
System.out.println("F" + " " + "E");
}
}
1.2.6 浮点数向零舍入
| 06 | 浮点数向零舍入 |
(int) num 将 float 类型的 num 强制转换为 int 类型,这样会直接截断小数部分,实现向零舍入的效果。
import java.util.Scanner;
/**
* @author HEAN
* time 2024/10/16
*/
public class Main {
public static void main(String[] args) {
float num = new Scanner(System.in).nextFloat();
int roundedNum = (int) num;
System.out.println(roundedNum);
}
}
1.2.7 打印ASCII码
| 07 | 打印ASCII码 |
scanner.next().charAt(0) 用于读取输入的第一个字符,然后将其转换为整数类型,即得到该字符的ASCII码
import java.util.Scanner;
/**
* @author HEAN
* time 2024/10/16
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char ch = scanner.next().charAt(0);
System.out.println((int) ch);
scanner.close();
}
}
1.2.8 打印字符
| 08 | 打印字符 |
(char) asciiCode 将整数类型的 asciiCode 强制转换为字符类型,这样就可以得到该ASCII码对应的字符
import java.util.Scanner;
/**
* @author HEAN
* time 2024/10/16
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int asciiCode = scanner.nextInt();
char ch = (char) asciiCode;
System.out.println(ch);
scanner.close();
}
}
1.2.9 整型与布尔型的转换
| 09 | 整型与布尔型的转换 |
在Java中,将一个整型变量的值赋给一个布尔型变量是不合法的,因为布尔型(boolean)只能存储true或false,而整型(int)可以存储更大范围的值。如果你尝试这样做,编译器会报错。
如果你想要将一个布尔型变量的值赋给一个整型变量,那么你需要进行类型转换。在Java中,布尔型转换为整型时,true会被转换为1,false会被转换为0。
本题使用c++解题
#include <bits/stdc++.h>
using namespace std;
int main()
{
bool a;
int b;
cin>>b;
a = b;
b = a;
cout<<b;
return 0;
}
运用 布尔型和整型的转化规则 使用java语言解题:
但是提交会报运行时错误
import java.util.Scanner;
/**
* author HEAN
* time 2024/10/16
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
System.out.println(a!= 0? 1 : 0);
scanner.close();
}
}
1.2.10 Hello, World!的大小
| 10 | Hello, World!的大小 |
在Java中,字符串(如"Hello, World!")实际上是一个对象,而不是基本数据类型。因此,使用sizeof函数(在C++中用于确定数据类型大小的运算符)在Java中是不适用的。
如果想知道字符串对象在Java中占用的内存大小,你可以使java.lang.instrument.Instrumentation接口,但是这需要在运行时使用Java代理来实现,这超出了本章的范围。
只是需要获取字符串对象的引用大小(即,引用变量本身的大小,而不是字符串内容的大小),那么在Java中,对象引用的大小是固定的,通常是4字节(32位系统)或8字节(64位系统),这取决于JVM的实现。如果需要获取字符串内容的大小(即,字符的数量),你可以使String.length()方法。
c++中可以使用sizeof来解答本题:sizeof可以求某常量、变量或类型占用的内存空间,单位是字节,也可以求某数组所占用的内存空间字节数
#include <bits/stdc++.h>
using namespace std;
int main()
{
cout<<sizeof("Hello, World!");
return 0;
}
变量定义、赋值与转换
在Java中,变量定义、赋值及转换是编程的基础。
变量定义:
在Java中,变量定义需要指定变量的类型和名称。例如:
int age;
变量赋值:
定义变量后,可以给变量赋值。例如:
age = 25;
变量转换:
Java中的变量转换可以分为自动类型转换和强制类型转换。
自动类型转换:当较小类型的数据转换为较大类型时,会自动进行。例如:
int num = 10;
double decimal = num; // 自动转换为double类型
强制类型转换:当需要将较大类型的数据转换为较小类型时,需要进行强制类型转换。例如:
double decimal = 10.5;
int num = (int) decimal; // 强制转换为int类型
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)