summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--Cargo.lock7
-rw-r--r--Cargo.toml8
-rw-r--r--README.md5
-rw-r--r--src/main.rs28
5 files changed, 49 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ea8c4bf
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/target
diff --git a/Cargo.lock b/Cargo.lock
new file mode 100644
index 0000000..157a4b0
--- /dev/null
+++ b/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "занятие1"
+version = "0.1.0"
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..ba31b37
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "занятие1"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..fbf7416
--- /dev/null
+++ b/README.md
@@ -0,0 +1,5 @@
+Код можно протестировать онлайн:
+
+https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=d23879f12477e77e21043962637a3397
+
+(ввод с клавиатуры закомментирован т.к. не работает в онлайн-компиляторе (или я не понял, как его заставить работать))
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..25bf001
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,28 @@
+fn main() {
+ let mut a_str: String = Default::default();
+ let mut power_str: String = Default::default();
+
+ println!("Введите число: ");
+ std::io::stdin().read_line(&mut a_str).expect("Ошибка ввода");
+ println!("\nВведите степень: ");
+ std::io::stdin().read_line(&mut power_str).expect("Ошибка ввода");
+
+ let a: i32 = a_str.trim().parse().unwrap();
+ let n: i32 = power_str.trim().parse().unwrap();
+
+ let res = power(a, n);
+ println!("{:?}", res);
+}
+
+fn power(a: i32, n: i32) -> i32 {
+ // запись при помощи match (аналог switch-case в Rust)
+ // немного лаконичнее if...else, в остальном преимуществ
+ // в данном случае нет
+ match n {
+ 0 => 1,
+ _ => match n % 2 {
+ 0 => i32::pow( power(a, n/2), 2 ),
+ _ => a * power(a, n-1),
+ }
+ }
+}