https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1005
好菜了。。编了改,改了编,鼓捣一个多小时。恶心。不过真心值得一做。。发现自己基础还不是很好
#include <iostream>
#include <stdio.h>
#include <stack>
#include <cstring>
using namespace std;
char a[10005];
char b[10005];
int c[30005];
int cmp(char x[],char y[])
{
if(strlen(x)>strlen(y))
return 1;
if(strlen(y)>strlen(x))
return -1;
if(strcmp(x,y)!=-1)
return 1;
return -1;
}
void pls(char x[],char y[])
{
if(strlen(x)<strlen(y))
swap(x,y);
int lena=strlen(x)-1;
int lenb=strlen(y)-1;
int i,j;
for( i=lena,j=lenb;j>=0;i--,j--)
{
if(x[i]<'0')
{
x[i]+=10;
x[i-1]--;
}
if(x[i]<y[j])
{x[i-1]--;
x[i]+=10;
}
c[i]=x[i]-y[j];
// cout<<c[i]<<endl;
}
for(i;i>=0;i--)
{
if(x[i]<'0')
{
x[i]+=10;
x[i-1]--;
}
c[i]=x[i]-'0';
// cout<<c[i]<<endl;
}
int flag=0;
for(int i=0;i<=lena;i++)
{
if(c[i]!=0)
flag=1;
if(flag)
printf("%d",c[i]);
}
}
void add(char x[],char y[])
{
if(strlen(x)<strlen(y))
swap(x,y);
int lena=strlen(x)-1;
int lenb=strlen(y)-1;
int i,j;
for( i=lena,j=lenb;j>=0;i--,j--)
{
c[i]=x[i]-'0'+y[j]-'0';
}
for(i;i>=0;i--)
c[i]=x[i]-'0';
int tep=0;
for(int i=lena;i>=0;i--)
{
if(i!=0)
{
c[i-1]+=c[i]/10;
c[i]%=10;
}
}
for(int i=0;i<=lena;i++)
printf("%d",c[i]);
}
void solve()
{
if(a[0]=='-'&&b[0]=='-')
{
printf("-");
add(&a[1],&b[1]);
}
if(a[0]!='-'&&b[0]=='-')
swap(a,b);
if(strcmp(a+1 ,b)==0)
{
printf("0");
return;
}
if((a[0]=='-'&&b[0]!='-'))
{
if( cmp(&a[1],b)==1 )
{
printf("-");
pls(a+1,b);
}
if( cmp(&a[1],b)==-1)
pls(b,a+1);
}
if(a[0]!='-'&&b[0]!='-')
{
add(a,b);
}
}
int main()
{
gets(a);
gets(b);
solve();
return 0;
}