笔者目前正在学习rust的基础语法,便想通过用rust做学校在pintia上开放的题集来熟悉语法细节.
首先,学校的拼题A分成了若干的题集,我便通过rust的工作空间Cargo Workspaces - The Rust Programming Language (rust-lang.org)来进行依赖和编译目标的管理.
图1–中文rust book对工作空间的讲解
图2–笔者通过RustRover进行cargo的管理
同时,可以通过python脚本来快速创建*.rs文件
# Python 脚本来创建 7 个 .rs 文件,文件名为 7_x1.rs, 7_x2.rs, ..., 7_x7.rs
import os
# 定义根目录路径(在这里设置为当前目录,可以根据需要修改)
root_directory = "./week7/src"
# 循环创建文件
for i in range(1, 8):
# 构建文件名
file_name = f"7_{i}.rs"
# 构建文件的完整路径
file_path = os.path.join(root_directory, file_name)
# 创建文件
with open(file_path, 'w') as file:
file.write(f"// This is file {file_name}\nfn input_parser() {{}}\nfn data_process() {{}}\nfn main() {{\n // TODO: Implement main logic here\n}}")
# 打印完成消息
print("Files created successfully.")
图3–运行结果
最后,写上代码,直接利用rustrover的run配置就行了
图4–直接运行
当然,你也可以用wsl的rustc和cargo
图5–多种配置来帮助你编译运行
同时,你也可以选择不同的编译目标
图6–各种编译目标
可以看到,由于rust的官方库的健全,数据结构的丰富和对所有权的把控,写起来还是算方便的
// 7-2 计算m到n之间所有素数的和
/*计算m到n之间所有素数的和,其中 2 <= m <=n <=100
输入格式:
请在这里写输入格式。例如:输入两个正整数
输出格式:
请在这里描述输出格式。例如:输出两个正整数之间的素数和。*/
use std::io;
fn main() {
// 你的代码写在这里...
let mut numbers = Vec::new();
let mut input_text = String::new();
io::stdin().read_line(&mut input_text).expect("Failed to read line");
numbers = input_text
.split_whitespace()
.map(|s| s.parse::<i32>().expect(""))
.collect();
if numbers.len() != 2 {
eprintln!("You should provide exactly two numbers.");
return;
}
let m = numbers[0];
let n = numbers[1];
if m < 2 || m > 100 || n < 2 || n > 100 || m > n {
eprintln!("Numbers out of range.");
return;
}
let sum: i32 = (m..=n).filter(|&x| is_prime(x)).sum();
println!("{}", sum);
}
fn is_prime(num:i32) -> bool{
if num <= 1 {
return false;
}
for i in 2..=(num as f64).sqrt() as i32 {
if num%i == 0{
return false;
}
}
true
}
美中不足的是在oj平台上编译时间过长,所以我更推荐在性能较为强大的自己的电脑上运行