计算C++中两个数相加所需的进位次数

我们得到两个数字 num_1 和 num_2。目标是计算添加数字时所需的进位操作次数。如果数字是 123 和 157,则进位操作将为 1。(7+3=10, 1+2+5=8, 1+1=2 )。

让我们用例子来理解

输入- num_1=432 num_2=638

输出- 将两个数字相加所需的进位运算次数为 - 2

说明- 从右到左添加数字和计数进位 -

(2+9=10, carry 1 ) count=1,
(1+3+3=7, carry 0 ) count=1,
(4+6=10, carry 1 ) count=2

输入- num_1=9999 num_2=111

输出- 将两个数字相加所需的进位运算次数为 - 4

说明- 从右到左添加数字和计数进位 -

(9+1=10, carry 1 ) count=1,
(1+9+1=11, carry 1 ) count=2,
(1+9+1=11, carry 1 ) count=3,
(1+9=10, carry 1) count=4

下面程序中使用的方法如下

我们将把两个数字都转换成字符串。从末尾开始遍历字符串,将字符转换为整数,加上之前的进位(第一次迭代为 0),如果 value>10 设置进位为 1。如果进位是 1 增量计数进位。

  • 取两个数字作为 num_1 和 num_2。

  • 函数carry_add_two_numbers(num_1, num_2) 获取两个数字并返回两者相加时所需的进位计数。

  • 使用to_string(x)并存储在 str_1 和 str_2 中将两个数字转换为字符串。

  • 使用length()lenght_str_1 和 length_str_2 获取两个字符串的长度。

  • 取初始计数为 0,初始进位也为 0。

  • 虽然两个长度都不为零。

  • 继续从最后一个字符转换为整数,并将整数存储在变量 i 和 j 中。

  • 减少两个字符串的长度。

  • 取变量添加为 i+j+carry。

  • 如果 add>10 则增加计数(因为它被携带)。并设置cary=1。否则为下一次迭代设置carry=0。

  • 在所有迭代结束后,计数将具有进位总数。

  • 返回计数作为结果。

示例

#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;
   return 0;
}
输出结果

如果我们运行上面的代码,它将生成以下输出 -

将两个数字相加所需的进位运算次数为: 2