【HDU 1002】A + B Problem II

A + B Problem II(题目链接)

思路

  • 该题的思路比较简单,将字符串中的数字取出,转换为数字,相加后,转换为字符,累加在结果中

代码

#include <iostream>
#include <string>							//字符串头文件 
using namespace std;

//返回字符串数字相加的结果 
string add(string a, string b){				//两个加数 
	int tmp = 0, i;							//tmp记录中间值,i表示当前位置 
	string sum;								//最后的结果 
	int la = a.length();					//a的长度 
	int lb = b.length();					//b的长度 
	//将位数相同的部分相加	
	for(i = 1; i <= min(la, lb); i++){		 
		tmp += a[la-i] + b[lb-i]-'0'-'0';	//计算两位相加的值 
		char ch = (tmp % 10) + '0';			//将个位转换为字符 
		sum = ch + sum;						//将字符加在结果的前面 
		tmp /= 10;							//去掉个位 
	}
	if(la > lb){
		sum = a.substr(0,la-lb) + sum;		//将长的数字剩下的部分加在Sum上 
	}else{
		sum = b.substr(0,lb-la) + sum;
	}
	int maxNum = max(la, lb);				//最长的作为循环条件 
	for(;i <= maxNum && tmp != 0; i++){		//tmp中为0就不必计算了 
		tmp += sum[maxNum-i] - '0';			//计算上次和当前位置的和 
		char ch = (tmp % 10) + '0';			//转换为字符 
		sum[maxNum-i] = ch;					//更新当前位置的值 
		tmp /= 10;							//去掉个位 
	}
	if(tmp != 0){							//若tmp最后还有值 
		char ch = tmp + '0';				//转换为字符 
		sum = ch + sum;						//加在sum的最前面 
	}
	return sum;								//返回计算的结果 
}

int main(){

	int t;									//题目中的t(样例数) 
	string s1, s2;							//两个加数 
	cin >> t;
	for(int i = 0; i < t; i++){
		cin >> s1 >> s2;
		cout << "Case " << i + 1 << ":" << endl;
		cout << s1 << " + " << s2 << " = " << add(s1, s2) << endl;
		if(i + 1 != t){						//不是最后一行 
			cout << endl;					//输出一个空行 
		}
	}

	return 0;
}

总结

  • add函数中的tmp,最开始没有初始化,在本地运行没有问题,当提交到oj上去后就错误。
HDU 2034 是一道经典的 A-B Problem 题目,通常涉及简单的数学运算或者字符串处理逻辑。以下是对此类问题的分析以及可能的解决方法。 ### HDU 2034 的题目概述 该题目要求计算两个数之间的差值 \(A - B\) 并输出结果。需要注意的是,输入数据可能存在多种情况,因此程序需要能够适应不同的边界条件和特殊情况[^1]。 #### 输入描述 - 多组测试数据。 - 每组测试数据包含两行,分别表示整数 \(A\) 和 \(B\)。 #### 输出描述 对于每组测试数据,输出一行表示 \(A - B\) 的结果。 --- ### 解决方案 此类问题的核心在于正确读取多组输入并执行减法操作。以下是实现此功能的一种常见方式: ```python while True: try: a = int(input()) b = int(input()) print(a - b) except EOFError: break ``` 上述代码片段通过循环不断接收输入直到遇到文件结束符 (EOF),适用于批量处理多组测试数据的情况。 --- ### 特殊考虑事项 尽管基本思路简单明了,在实际编码过程中仍需注意以下几点: 1. **大数值支持**:如果题目中的 \(A\) 或 \(B\) 可能非常大,则应选用可以容纳高精度的数据类型来存储这些变量。 2. **负数处理**:当 \(B>A\) 导致结果为负时,确保程序不会因符号错误而失效。 3. **异常捕获**:为了防止运行期间由于非法字符或其他意外状况引发崩溃,建议加入必要的错误检测机制。 --- ### 示例解释 假设给定如下样例输入: ``` 5 3 7 2 ``` 按照以上算法流程依次完成各步操作后得到的结果应当分别为 `2` 和 `5`。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值