Hdu1002 C++
来自一只编程小白
C++
#include<iostream>
#include<cstring>
using namespace std;
int main(){
int n,m=1;
cin>>n;
while(n--){
char a[1010]={0},b[1010]={0},c[1010]={0};
cin>>a>>b;
cout<<"Case "<<m++<<":"<<endl;
cout<<a<<" + "<<b<<" = ";
int i,j,l=0,k,p=0,q=0;
i=strlen(a)-1;
j=strlen(b)-1;
for(k=0;k<i;k++){
if(a[k]=='0')
p++;
else
break;
}
for(k=0;k<j;k++){
if(b[k]=='0')
q++;
else
break;
}
for(;i>=p&&j>=q;i--,j--){
c[l++]=a[i]+b[j]-'0';
}
if(i-p>j-q){
for(;i>=p;i--)
c[l++]=a[i];
}
else if(i-p<j-q){
for(;j>=q;j--)
c[l++]=b[j];
}
c[l]='0';
for(l=0;l<strlen(c)-1;l++){
if(c[l]-'9'>0){
c[l]=c[l]-10;
c[l+1]+=1;
}
}
l=strlen(c)-2;
if(c[l]!='0')
for(;l>=0;l--)
cout<<c[l];
else{
l-=1;
for(;l>=0;l--)
cout<<c[l];
}
cout<<endl;
if(n!=0)
cout<<endl;
}
return 0;
}
Tips
1.最后的格式要使用两次的endl。
2.要考虑前置0的情况,比如0000 0000;1000 0001;0012 0012(所以我用了p和q进行记录)。
3.很久才发现因为数组初始化而产生的混乱,就可能在一次运行中偶尔会出现一些奇奇怪怪的结果(小白),然后把最开始的数组都进行初始化附了0值,然后就成功AC了。
4.提示自己在使用strlen的时候计算出的实际上是有效的字符长度,要记得减去1,不然会越界。