计算C++中两个数相加所需的进位次数
我们得到两个数字num_1和num_2。目标是计算添加数字时所需的进位操作次数。如果数字是123和157,则进位操作将为1。(7+3=10,1+2+5=8,1+1=2)。
让我们用例子来理解
输入-num_1=432num_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=9999num_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。
在所有迭代结束后,计数将具有进位总数。
返回计数作为结果。
示例
#includeusing 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<<"将两个数字相加所需的进位运算次数为: "< 输出结果 如果我们运行上面的代码,它将生成以下输出-
将两个数字相加所需的进位运算次数为: 2