题解P1601 A+B problem(高精)

当时信奥老师叫我们做出A+B高精,于是我就做了一波

第一版:WA60

从高往低位。如果碰到进位后面加一下1,注意归零
还有字符串转字符。

#include
using namespace std;
int g(char w){
	int t='1'-1,d;
	d=w-t;
	return d;
}
int y(int a,int b){
	return a>b?a:b; 
}
int main(){
	int s[8192],t[8192],u[8192],a,b;
	string str1,str2;
	cin>>str1>>str2;
	memset(s,0,sizeof(s));
	memset(t,0,sizeof(t));
	memset(u,0,sizeof(u));
	for(int i=0;i<str1.size();i++){//从后往前
		a=g(str1[i]);
		s[str1.size()-(i+1)]=a;
	}
	for(int i=0;i<str1.size();i++){
		a=g(str2[i]);
		t[str2.size()-(i+1)]=a;
	}
	/*for(int i=0;i

    int max=y(str1.size(),str2.size());
    for(int i=0;i<max;i++)
	{
		u[i]=(s[i]+t[i]+u[i]);//不加不进位
		if(u[i]>=10){
			u[i+1]++;
			u[i]-=10;
		}
	}
	if(u[max]>0)
	for(int i=max;i>=0;--i)//前导零。。。
		cout<<u[i];
	else
	for(int i=max-1;i>=0;--i)
		cout<<u[i];
	return 0;
} 

题解P1601 A+B problem(高精)_第1张图片

2. 80分

下载了数据,没想到……
i n \mathsf{in} in文件

11111111111111111111111111
9999999999999999999999999999999999

o u t \mathsf{out} out文件

10000000011111111111111111111111110

自侧,少了 999...9 999...9 999...9[惊恐][惊恐]
想了一下,应该特判,再加上缺少的位数。(max-str2.size()

#include
using namespace std;
int g(char w){
	int t='1'-1,d;
	d=w-t;
	return d;
}
int y(int a,int b){
	return a>b?a:b; 
}
int main(){
	int s[8192],t[8192],u[8192],a,b;
	string str1,str2;
	cin>>str1>>str2;
	memset(s,0,sizeof(s));
	memset(t,0,sizeof(t));
	memset(u,0,sizeof(u));
	for(int i=0;i<str1.size();i++){
		a=g(str1[i]);
		s[str1.size()-(i+1)]=a;
	}
	for(int i=0;i<str1.size();i++){
		a=g(str2[i]);
		t[str2.size()-(i+1)]=a;
	}
/*	for(int i=0;i
    int max=y(str1.size(),str2.size());int tql=0;
    if(max==str2.size())tql=max-str1.size();
    for(int i=0;i<max;i++)
	{
		u[i]=(s[i]+t[i]+u[i]);
		if(tql>0){
			u[i]+=9;
			tql--;
		}
		if(u[i]>=10){
			u[i+1]++;
			u[i]-=10;
		}
	}
	if(u[max]>0)
	for(int i=max;i>=0;--i)
		cout<<u[i];
	else
	for(int i=max-1;i>=0;--i)
		cout<<u[i];
	return 0;
} 

完美(?),提交一发……

Boom!!第五个测试点WA了[衰]
仔细想想,想不出来,但是新思路来了!

3. AC!!!

当时max变量放它干嘛??
如果
如果
如果
第二个数字大几位,那么交换一下不就OK了吗?!

#include
using namespace std;
int g(char w){
	int t='1'-1,d;
	d=w-t;
	return d;
}
int main(){
	int s[8192],t[8192],u[8192],a,b;
	string str1,str2;
	cin>>str1>>str2;
	memset(s,0,sizeof(s));
	memset(t,0,sizeof(t));
	memset(u,0,sizeof(u));
	if(str1.size()<str2.size()){//there!!
		string t=str1;
		str1=str2;
		str2=t;
	}
	for(int i=0;i<str1.size();i++){
		a=g(str1[i]);
		s[str1.size()-(i+1)]=a;
	}
	for(int i=0;i<str1.size();i++){
		a=g(str2[i]);
		t[str2.size()-(i+1)]=a;
	}
    for(int i=0;i<str1.size();i++)
	{
		u[i]=(s[i]+t[i]+u[i]);
		if(u[i]>=10){
			u[i+1]++;
			u[i]-=10;
		}
	}
	if(u[str1.size()]>0)
	for(int i=str1.size();i>=0;--i)
		cout<<u[i];
	else
	for(int i=str1.size()-1;i>=0;--i)
		cout<<u[i];
	return 0;
} 

你可能感兴趣的:(OJ,算法)