当时信奥老师叫我们做出A+B高精,于是我就做了一波
从高往低位。如果碰到进位后面加一下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;
}
下载了数据,没想到……
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了[衰]
仔细想想,想不出来,但是新思路来了!
当时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;
}