记录编号 51087 评测结果 AAAAAAAAAA
题目名称 增强的加法问题 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 0.004 s
提交时间 2012-12-10 20:03:44 内存使用 0.31 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<cstring>
using namespace std;
//注意:先预处理a,b,c的s和l
const int SIZE=200;
struct haint{
	char s[SIZE];//数
	int l;//长度,不是指针
};
void turnint(struct haint &x){
	int i;
	for(i=0;i<x.l;i++) x.s[i]-='0';
}
void turnchar(struct haint &x){
	int i;
	for(i=0;i<x.l;i++) x.s[i]+='0';
}
void haclear(struct haint &x){
	int i;
	for(i=0;i<SIZE;i++) x.s[i]=0;
}
void haneg(struct haint &x){//翻转某个数组
	int i=0,j=x.l-1,temp;
	while(i<=j) temp=x.s[i],x.s[i]=x.s[j],x.s[j]=temp,i++,j--;
}
void haplus(struct haint &a,struct haint &b,struct haint &c){//a+b存于c
	turnint(a),turnint(b);//如果a,b中是数就给本行加上注释
	haneg(a),haneg(b);//如果a,b是逆序就给本行加上注释
	int i,l=(a.l>b.l)?a.l:b.l;
	for(i=0;i<l;i++){
		c.s[i]+=a.s[i]+b.s[i];
		c.s[i+1]+=c.s[i]/10;
		c.s[i]%=10;
	}
	if(c.s[l]!=0) l++;
	c.l=l;
	turnchar(c);//如果想保存数字就给本行加上注释
	haneg(c);//如果想保存逆序就给本行加上注释
}
int main(){
	freopen("add.in","r",stdin);
	freopen("add.out","w",stdout);
	struct haint a,b,c;
	haclear(a),haclear(b),haclear(c);
	cin>>a.s>>b.s;
	a.l=strlen(a.s),b.l=strlen(b.s);
	haplus(a,b,c);
	cout<<c.s<<endl;
	return 0;
}