A-B求借位次数c++

给定两个正整数 A≥B,我们在计算 A−B 的时候,从个位开始依次对每一位做减法。当 A 的某位数字 a 比 B 的对应位数字 b 小的时候,A 就需要向高位借 10,然后计算 10+a−b。

本题就请你写程序统计一次减法中到底做了多少次借位操作。

输入格式:

输入在两行中先后给出两个正整数 A 和 B,满足 0 < B ≤ A ≤ 1010000。

输出格式:

在一行中输出计算 A−B 过程中借位操作的次数。

输入样例:

92338249361576354802
88915368421673890711

输出样例:

10

参考代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s, t;
    cin >> s >> t;
    t = string(s.size()-t.size(), '0') + t;//t位数比s少,用0补齐  
    int res = 0;//次数
    int flag = 0;//记录上一位要不要借位
    for(int i = s.size()-1; i>=0; i--){
       if(s[i]-flag < t[i]) res++, flag = 1;//需要借位
       else flag = 0;
    }
    cout << res;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
题目需要实现高精度减法运算,计算a减去b的结果。假设a和b都是非负整数,且数不超过240。 高精度减法的思路是从个开始逐相减,如果当前被减数小于减数,则向高。具体步骤如下: 1. 将a和b转化为字符串,分别保存在字符串变量a_str和b_str中。 2. 创建一个空的列表result,用于保存计算结果。 3. 初始化两个指针i和j,分别指向a_str和b_str的最右边(即个)。 4. 定义一个变量carry,用于记录借情况,初始化为0。 5. 从个开始,依次取a_str和b_str的当前,并将其转化为整数类型。如果b_str的当前大于a_str的当前,则从高。具体步骤如下: - 如果b_str的当前大于a_str的当前,则将当前的借设置为10并将carry设置为1。 - 否则,将借设置为0,carry设置为0。 6. 将a_str和b_str的当前数相减,再加上借,得到当前的减法结果。 7. 将减法结果转化为字符串,并添加到result列表的最左边。 8. 继续向前移动指针i和j,直到两个字符串遍历完。 9. 将result列表中的所有字符串拼接成一个字符串。 10. 返回最终减法结果。 下面是Python代码实现: ```python def high_precision_subtraction(a, b): a_str = str(a) b_str = str(b) result = [] i = len(a_str) - 1 j = len(b_str) - 1 carry = 0 while i >= 0 or j >= 0: digit_a = int(a_str[i]) if i >= 0 else 0 digit_b = int(b_str[j]) if j >= 0 else 0 if digit_b > digit_a: digit_a += 10 carry = 1 else: carry = 0 subtraction_result = digit_a - digit_b + carry result.insert(0, str(subtraction_result)) i -= 1 j -= 1 return ''.join(result) ``` 通过调用`high_precision_subtraction(a, b)`函数,我们可以得到高精度减法的结果。请注意,输入的a和b应该是整数类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值