计算在 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)相加,如果值 > 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 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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP