ภาพรวม
ได้รับสตริงที่มีตัวเลข เป้าหมายคือหาตัวเลขเทียบเท่าด้วยวิธี atoi() แบบเรียกซ้ำ (Recursive) int atoi(const char *str) แปลงสตริงเป็นจำนวนเต็ม
ตัวอย่าง
อินพุต − Str[] = "58325"
เอาต์พุต − The Equivalent decimal is: 58325
คำอธิบาย − สตริงมีตัวเลขเทียบเท่า 58325
อินพุต − Str[] = "00010"
เอาต์พุต − The Equivalent decimal is: 10
คำอธิบาย − สตริงมีตัวเลขเทียบเท่า 10
แนวทางการแก้ปัญหา
ใช้ฟังก์ชันเรียกซ้ำ recurAtoi() รับสตริงและความยาว สำหรับแต่ละตัวอักษร แปลงเป็นค่าทศนิยม คูณ 10 บวกผลลัพธ์ก่อนหน้า
- รับสตริง
Str[] - คำนวณความยาว
strlen(Str) - ฟังก์ชัน
recurAtoi(char *str, int len)คืนค่าตัวเลข - Base case: หาก len == 1 คืน
*str - '0' - Recursive:
temp = 10 * recurAtoi(str, len-1)แล้วtemp += str[len-1] - '0' - คืนค่า
temp - พิมพ์ผลลัพธ์
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
int recurAtoi(char *str, int len){
if (len == 1){
return *str - '0';
}
int temp = 10 * recurAtoi(str, len - 1);
temp = temp + str[len - 1] - '0';
return (temp);
}
int main(void){
char Str[] = "58325";
int length = strlen(Str);
cout << "Equivalent decimal :" << recurAtoi(Str, length);
return 0;
}
ผลลัพธ์
Equivalent decimal: 58325