杭电oj1002题

在这里插入图片描述这一题相比前两题来说还是有些难度的,
1.数的位数小于1000,所以不能简单的用int类型相加,于是我就考虑用char类型的数组存放数据,然后再转化成int型运算。
2.类型转化的时候有一点要注意,我刚开始使用(int)(a[i])这种方式,但是不行,我也不知道是为啥,有知道的可以跟我讨论,然后我就改成了a[i]-'0’这种,顺利解决
3.用这种平台做题空格和空行这些细节一定要考虑到位,我就是输出结果的时候 Case1:1+2=3 这样等式之间没有加空格,浪费了很久。还有就是每两个数据之间要有一个空行。

总结一下这一题的思路吧,字符数组存放数据,记录下数组长度,从尾端(即数字最低位)开始,逐个取数并相加,存放的时候也从数组尾部开始存c[k]。将进位放入c[k-1],每次都先加上进位再与10运算。计算结束之后,读取结果时,先把k++,知道找到第一个c[k]不等于0,此时结果最高位就找到了,往后依次遍历输出就行了。
ac的程序如下:

#include<stdio.h>
#include<string.h>
int main(){
	int n,p=0;
	scanf("%d",&n);
	while(n--){
		
		char a[1001],b[1001];
		int c[1001]={0};
		int i,j,k;
		scanf("%s %s",a,b);
		i=strlen(a)-1;
		j=strlen(b)-1;
		//printf("%d %d\n",i,j);
		//printf("%s",a);
		//printf("%s",b); 
		int sum=0;
		for(k=1000;i>=0||j>=0;k--){   //个位在最右边 
			if(i<0&&j>=0){        //b比a长 
				sum+=b[j--]-'0';
			    //printf("%d\n",sum);
			} 
			else if(j<0&&i>=0) {
				sum+=a[i--]-'0';
			    //printf("%d\n",sum);
			}
			else sum=(a[i--]-'0')+(b[j--]-'0'); //转换成int 型 
			//printf("%d\n",(int)(b[j--]));
			//printf("%d\n",sum);
			sum+=c[k];  //考虑进位
			int q=k-1; 
			c[q]=sum/10;    
			c[k]=sum%10;
			//printf("%d %d\n",c[q],c[k]);
			sum=0;
		}
		p++;
		printf("Case %d:\n",p);
		printf("%s + %s = ",a,b); 
		while(c[k]==0) k++;  //找到最高位从最高位开始输出结果 
		//printf("%d\n",k);
		for(k;k<1001;k++){
			printf("%d",c[k]);
		}
		
		if(n>0) printf("\n\n");  //两个数据之间有一个空行 
		else printf("\n");
	}
	return 0;
}
杭电OJ(Online Judge)是中国的一家在线编程竞赛平台,提供各种算法、数据结构以及计算机科学相关的目供用户练习和挑战。其中编号为“1002”的目通常会根据其具体的描述来命名和分类。 针对“杭电oj1002”,如果这是一个特定的C++目,那么其背景和内容将依赖于该目的具体说明部分。然而,我可以为你提供一些通用指导,帮助你在面对这类目时如何准备和解决。 ### 准备步骤: 1. **理解问描述**:首先,认真阅读目描述,理解输入、输出的具体要求,以及任何限制条件。这是解决问的基础。 2. **分析数据范围**:了解输入的数据规模对选择解法非常重要。例如,对于较小的数据量,可以采用暴力搜索等直接方法;而对于大规模数据,则需要考虑更高效的算法,如动态规划、图论算法、数学技巧等。 3. **确定解法**:基于问特点和数据范围,选择合适的算法或数据结构。对于“1002”这样的目,通常会涵盖多种基本和进阶的算法知识。 4. **编码实现**:在理解和设计算法之后,开始编写代码实现。使用C++语言时,注意语法细节、效率优化,并确保程序的可读性和维护性。 5. **调试测试**:提交前,通过自测案例验证程序的正确性和性能。可以尝试边界情况、极端值等边缘测试数据点。 6. **提交与反馈**:提交代码到杭电OJ平台上,等待系统反馈结果。接收错误信息后,针对性地修改代码,直至通过所有测试案例。 ### 相关问: 1. 面对复杂的算法时,应该如何有效地分解问并找到解决方案? 2. C++中常用的数据结构有哪些,在“1002”类型的目中哪些可能会用到? 3. 在编写C++代码时,如何有效处理输入输出操作以满足杭电OJ的要求? 以上指南旨在帮助你提高在杭电OJ上解答类似问的能力,希望对你有帮助。记住,实践是提升的关键,多做、总结经验,你会逐渐变得更熟练。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值