先看c 再看c++ 感觉怪怪的
#include<stdio.h>
#include<string.h>
int number=0;
void ad(char a[],char b[]);
int main(){
int n;
scanf("%d",&n);
while(n--)
{
char a[1002],b[1002];
scanf("%s %s",a,b);
ad(a,b);
if(n!=0)
putchar(10);
}
return 0;
}
void ad(char a[],char b[]){
int j[1002],k[1002],add[1002],adds[1002],head=0;
int al=strlen(a),bl=strlen(b);
for(int i=al-1;i>=0;i--)
j[i]=a[i]-48;
for(int i=bl-1;i>=0;i--)
k[i]=b[i]-48;
int m,n,o=0,in=0,jinr=0,jinl=0;
for(m=al-1,n=bl-1;m>=0&&n>=0;m--,n--,o++){
jinr=jinl;
if(jinr==0) in=j[m]+k[n];
else in=j[m]+k[n]+1;
if(in>=10)
{
if(m==0&&n==0) head=1;
in=in-10;jinl=1;
}
else
jinl=0;
add[o]=in;
if(head==1) add[++o]=1;
}
if((m<0)&&n>=0)
for(;n>=0;n--)
{
jinr=jinl;
if(jinr==0)
{
add[o++]=k[n];jinl=0;
}
else
{
k[n]=k[n]+1;
if(k[n]>=10)
{
if(n==0) head=1;
k[n]=k[n]-10;
add[o++]=k[n];
jinl=1;
}
else
add[o++]=k[n]+1;
}
if(head==1) add[o++]=1;
}
else if(m>=0&&n<0)
for(;m>=0;m--)
{
jinr=jinl;
if(jinr==0)
{
add[o++]=j[m];jinl=0;
}
else
{
j[m]=j[m]+1;
if(j[m]>=10)
{
if(m==0) head=1;
j[m]=j[m]-10;
add[o++]=j[m];
jinl=1;
}
else
add[o++]=j[m]+1;
}
if(head==1) add[o++]=1;
}
for(m=0,o--;o>=0;o--,m++)
adds[m]=add[o];
printf("Case %d:\n",++number);
printf("%s + %s = ",a,b);
for(int kk=0,flat=0;kk<m;kk++)
{
if(flat==0&&adds[kk]==0);
else
flat=1;
if(flat==1)
printf("%d",adds[kk]);
if(flat==0&&kk==m-1)
printf("%d",adds[kk]);
}
putchar(10);
}
c++方便了一倍
#include<iostream>
#include<string>
using namespace std;
string add(string s1,string s2)
{
string max=s2,min=s1;
if(s1.length()>s2.length())
{
max=s1;
min=s2;
}
int a=max.length()-1,b=min.length()-1;
for(int i=b;i>=0;i--)
{
max[a--]+=min[i]-'0';
}
for(int j=max.length()-1;j>0;j--)
{
if(max[j]>'9')
{
max[j]=max[j]-10;
max[j-1]+=1;
}
}
if(max[0]>'9')
{
max[0]-=10;
max='1'+max;
}
return max;
}
int main()
{
int n,i;
cin>>n;
for(i=1;i<=n;i++)
{
string s1,s2;
cin>>s1>>s2;
cout<<"Case "<<i<<":"<<endl;
cout<<s1<<" + "<<s2<<" = "<<add(s1,s2)<<endl;
if(i!=n)
cout<<endl;
}
}
所以
今后最好少用c吧(大一勿看)