【可达编程】P0001. L1-A+B Problem

创作前言

该题目虽然简单,但创作者绝不会水帖

题目描述

输入两个整数 x,yx,y,输出它们的和(|x|,|y| \le {10}^9)(∣x∣,∣y∣≤109)。

输入格式

一行,两个整数x,yx,y, 0\leq x,y\leq 327670≤x,y≤32767 .

输出格式

一个整数,x与yx与y的和.

样例

输入数据 1

123 500

输出数据 1

623

时间及内存限制

1s, 1024KiB for each test case.

首先头文件等内容(有手就行)

#include<bits/stdc++.h>
using namespace std;
int main(){
    
    return 0;
}

其次,我们要创建变量

int a,b;

接下来,输入

scanf("%d%d",&a,&b);
cin>>a>>b;//两者都可以,看自己喜好
### L1-011 A-B C++ 问题解析 #### 题目描述 给定两个正整数 $A$ 和 $B$,计算它们的差值并输出。 #### 解题思路 该问题的核心在于处理大数运算。由于标准数据类型的范围有限(如 `int` 的最大值约为 $2^{31}-1$),当 $A$ 和 $B$ 超过这一范围时,需采用字符串或其他方式实现高精度减法操作。以下是具体步骤: 1. 将输入的数字作为字符串读取。 2. 对齐两数位数,较短的数字前面补零以便逐位相减。 3. 实现借位逻辑完成每一位的减法。 4. 去除结果前导零后输出最终答案。 #### 参考代码 以下是一个基于上述思路的完整解决方案: ```cpp #include <iostream> #include <string> using namespace std; // 定义高精度减法函数 string subtract(string a, string b) { // 确保a >= b if (a.length() < b.length()) return "-" + subtract(b, a); if (a.length() == b.length() && a < b) return "-" + subtract(b, a); // 补足长度 while (a.length() > b.length()) b = '0' + b; while (b.length() > a.length()) a = '0' + a; string res = ""; int carry = 0; // 借位标志 for (int i = a.length()-1; i >= 0; --i){ int temp = (a[i]-'0') - (b[i]-'0') - carry; if (temp < 0){ temp += 10; carry = 1; } else{ carry = 0; } res = char(temp+'0') + res; } // 移除前导零 size_t pos = res.find_first_not_of('0'); if(pos != string::npos) return res.substr(pos); return "0"; } int main(){ string a, b; cin >> a >> b; cout << subtract(a, b) << endl; return 0; } ``` #### 关键点分析 1. **字符串比较**:为了确保被减数大于等于减数,在必要情况下交换两者顺序,并标记负号[^1]。 2. **借位机制**:通过变量 `carry` 记录当前位是否需要向高位借位。 3. **去前置零**:最后的结果可能含有不必要的前导零,因此需要特别处理去除这些冗余字符。 #### 测试样例 | 输入 | 输出 | |------|------| | 123 45 | 78 | | 1000 999 | 1 | | 999 1000 | -1 | --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值