Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

นับจำนวนการยืม (carry) เมื่อบวกสองตัวเลขใน C++


เราได้รับตัวเลขสองตัว num_1 และ num_2 เป้าหมายคือนับจำนวนการยืม (carry operations) ที่ต้องใช้ถ้าบวกตัวเลขทั้งสอง ถ้าตัวเลขคือ 123 และ 157 การยืมจะเป็น 1 ครั้ง (7+3=10, 1+2+5=8, 1+1=2)

มาดูตัวอย่าง

อินพุต − num_1=432 num_2=638

เอาต์พุต − จำนวนการยืมเมื่อบวกสองตัวเลข คือ 2

คำอธิบาย − จากขวาไปซ้าย บวกตัวเลขและนับการยืม −

(2+8=10, ยืม 1) count=1, (1+3+3=7, ยืม 0) count=1, (4+6=10, ยืม 1) count=2

อินพุต − num_1=9999 num_2=111

เอาต์พุต − จำนวนการยืมเมื่อบวกสองตัวเลข คือ 4

คำอธิบาย − จากขวาไปซ้าย บวกตัวเลขและนับการยืม −

(9+1=10, ยืม 1) count=1, (1+9+1=11, ยืม 1) count=2, (1+9+1=11, ยืม 1) count=3, (1+9=10, ยืม 1) count=4

แนวทางที่ใช้ในโปรแกรม

เราจะแปลงตัวเลขทั้งสองเป็นสตริง เริ่มเดินทางสตริงจากท้าย แปลงตัวอักษรเป็นจำนวนเต็ม บวกทั้งสองและการยืมก่อนหน้า (0 สำหรับรอบแรก) ถ้าค่า >=10 กำหนดการยืมเป็น 1 ถ้าการยืมเป็น 1 เพิ่ม count ของการยืม

  • รับตัวเลขสองตัวเป็น num_1 และ num_2
  • ฟังก์ชัน carry_add_two_numbers(num_1, num_2) รับตัวเลขทั้งสอง คืนจำนวนการยืมเมื่อบวกทั้งสอง
  • แปลงตัวเลขทั้งสองเป็นสตริงด้วย to_string(x) เก็บใน str_1 และ str_2
  • หาความยาวทั้งสองสตริงด้วย length() เป็น length_str_1 และ length_str_2
  • กำหนด count เริ่มต้น 0 และ carry เริ่มต้น 0
  • ลูป while ทั้งสองความยาวไม่เป็นศูนย์
  • แปลงจากตัวอักษรท้ายสุดเป็นจำนวนเต็ม เก็บในตัวแปร i และ j
  • ลดความยาวทั้งสองสตริง
  • ตัวแปรบวก add = i + j + carry
  • ถ้า add >= 10 เพิ่ม count (เพราะเป็นการยืม) และกำหนด carry=1 มิฉะนั้นกำหนด carry=0 สำหรับรอบต่อไป
  • ท้ายสุดของการวนซ้ำทั้งหมด count จะมีจำนวนการยืมทั้งหมด
  • คืน count

ตัวอย่างโค้ด C++

#include <bits/stdc++.h>
using namespace std;

int carry_add_two_numbers(int num_1, int num_2){
    string str_1 = to_string(num_1);
    int length_str_1 = str_1.length();
    string str_2 = to_string(num_2);
    int length_str_2 = str_2.length();
    int count = 0, carr = 0;
    while(length_str_1 != 0 || length_str_2 != 0){
        int i = 0, j = 0;
        if (length_str_1 > 0){
            i = str_1[length_str_1 - 1] - '0';
            length_str_1--;
        }
        if (length_str_2 > 0){
            j = str_2[length_str_2 - 1] - '0';
            length_str_2--;
        }
        int add = i + j + carr;
        if (add >= 10){
            carr = 1;
            count++;
        } else {
            carr = 0;
        }
    }
    return count;
}

int main(){
    int num_1 = 234578;
    int num_2 = 1234;
    int count = carry_add_two_numbers(num_1, num_2);
    cout<<"Count of number of carry operations required to add two numbers are: "<<count;
    return 0;
}

เอาต์พุต

หากรันโค้ดด้านบนจะได้ผลลัพธ์ดังนี้ −

Count of number of carry operations required to add two numbers are: 2