第一次手写大数加法模版,很菜。。不考虑负数的 下次把负数的也补齐
洛谷 P1601
#include<cstdio>
#include<iostream>
#include<stack>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<map>
#define INF 0x3f3f3f3f
using namespace std;
const int maxn=105;
string judge(string a)
{
int cnt=0;
for(int i=0;i<a.length();i++) if(a[i]=='0') cnt++;
if(cnt==a.length()) a="0";
return a;
}
int main()
{
string a,b;
int m[2000],n[2000],ans[2000];
int cnt=1;
//while(t--)
cin>>a>>b;
memset(m,0,sizeof(m));memset(n,0,sizeof(n));memset(ans,0,sizeof(ans));
///cout<<"Case "<<cnt++<<":"<<endl;
//for(int i=0;i<a.length();i++) cout<<a[i];
//cout<<" + ";
//for(int i=0;i<b.length();i++) cout<<b[i];
//cout<<" = ";
a=judge(a);b=judge(b);
for(int i=a.length()-1,j=0;i>=0;i--,j++) m[j]=a[i]-'0';
for(int i=b.length()-1,j=0;i>=0;i--,j++) n[j]=b[i]-'0';
int d=max(a.length(),b.length());
for(int i=0;i<d;i++)
{
if(m[i]+n[i]+ans[i]>=10)
{
ans[i]=(m[i]+n[i]+ans[i])-10;
ans[i+1]++;
}
else if((m[i]+n[i]+ans[i])<10) ans[i]=m[i]+n[i]+ans[i];
}
if(ans[d]==0) for(int i=d-1;i>=0;i--) cout<<ans[i];
else if(ans[d]!=0) for(int i=d;i>=0;i--) cout<<ans[i];
cout<<endl;
memset(m,0,sizeof(m));memset(n,0,sizeof(n));memset(ans,0,sizeof(ans));
return 0;
}
51nod 1005
#include<stdio.h>
#include<string.h>
#define max 10006
int fun(char a[],char b[]);
int main()
{
char a[max],b[max];
scanf("%s%s",a,b);
fun(a,b);
return 0;
}
int fun(char a[],char b[])
{
int c[max];
int k=0,i,j,lena,lenb,t;
int flaga=0,flagb=0,signa=1,signb=1,flag=0;
lena=strlen(a);
lenb=strlen(b);
if(a[0]=='-'&&b[0]=='-')
{
flag=1;
flaga=flagb=1;
}
else if(a[0]=='-'||b[0]=='-')
{
if(a[0]=='-')
flaga=1;
else
flagb=1;
if(lena-flaga>lenb-flagb)
signb=-1;
else if(lena-flaga<lenb-flagb)
signa=-1;
else
{
if(strcmp(&a[flaga],&b[flagb])>0)
signb=-1;
else if(strcmp(&a[flaga],&b[flagb])<0)
signa=-1;
else
{
printf("0\n");
return 0;
}
}
if(flaga==1&&signb==-1)
flag=1;
else if(flagb==1&&signa==-1)
flag=-1;
}
t=0;
for(i=lena-1,j=lenb-1;i>=flaga||j>=flagb;i--,j--)
{
if(i>=flaga&&j>=flagb)
c[k++]=(a[i]-'0')*signa+(b[j]-'0')*signb+t;
else if(i>=flaga&&j<flagb)
c[k++]=a[i]-'0'+t;
else if(i<flaga&&j>=flagb)
c[k++]=b[j]-'0'+t;
if(c[k-1]>9)
{
c[k-1]-=10;
t=1;
}
else if(c[k-1]<0)
{
c[k-1]+=10;
t=-1;
}
else
t=0;
}
if(t==1)
c[k++]=1;
while(!c[k-1]&&(k-1)!=0) k--;
if(flag)
printf("-");
for(i=k-1;i>=0;i--)
printf("%d",c[i]);
printf("\n");
return 0;
}