方法一
#include <iostream>
#include <string>
using namespace std;
void main()
{
int T=0;
cin>>T;
for(int n=1; n<=T; n++)
{
string a;
string b;
cin>>a>>b;
int i=a.length()-1;
int j=b.length()-1;
string result="";
int carry=0;
while(i>=0||j>=0||carry==1)
{
int sum=0;
int a1=(i>=0)?(a[i--]-'0'):0;
int b1=(j>=0)?(b[j--]-'0'):0;
sum=(a1+b1+carry)%10;
carry=(a1+b1+carry)/10;
result=(char)(sum+'0')+result;
}
cout<<"Case "<<n<<':'<<endl;
cout<<a<<" + "<<b<<" = "<<result<<endl;
if(n!=T)
cout<<endl;
}
}
方法二
学到知识点
char*p=NULL; cin>>p;
错误:必须给p分配空间或使用c++中字符串变量strlen()
用法:以结束符\0判断长度,因此当字串中有ascii值为0,不会计入- acm中对最后换行符有要求,注意:例如最后一行只输出一行
#include <iostream>
using namespace std;
void char2num(char* str)
{
int N=strlen(str);
for(int i=0; i<N; i++)
*(str+i)=*(str+i)-'0';
}
int add_str(char* pstr1, int len1, char* pstr2, int len2, char* pstr3)
{
int N1=len1;
int N2=len2;
int ncount=0;
char flag=0;
while(N1>0||N2>0)
{
char sum=0;
if(N1==0) sum=*(pstr2+N2-1)+flag;
else
if(N2==0) sum=*(pstr1+N1-1)+flag;
else
sum=*(pstr1+N1-1)+*(pstr2+N2-1)+flag;
flag=sum/10;
sum %=10;
*(pstr3+ncount)=sum;
if(N1>0) N1--;
if(N2>0) N2--;
ncount++;
if(N1==0&&N2==0)
{
if(flag==1)
{
*(pstr3+ncount)=1;
ncount++;
}
}
}
return ncount;
}
void outputchar(char* pstr, int len)
{
int N=len;
int nonzeroflag=0;
for(int i=0; i<N; i++)
{
if((int)(*(pstr+i))!=0)
{
cout<<(int)(*(pstr+i));
nonzeroflag=1;
}
if((nonzeroflag==1)&&((int)(*(pstr+i))==0))
cout<<(int)(*(pstr+i));
}
if(nonzeroflag==0)
cout<<0;
}
void output_result(char* pstr, int len)
{
int N=len;
int nonzeroflag=0;
for(int i=N-1; i>=0; i--)
{
if((int)(*(pstr+i))!=0)
{
cout<<(int)(*(pstr+i));
nonzeroflag=1;
}
if((nonzeroflag==1)&&((int)(*(pstr+i))==0))
cout<<(int)(*(pstr+i));
}
if(nonzeroflag==0)
cout<<0;
}
int main()
{
int T=0;
cin>>T;
char* strA=(char*)malloc(10000);
char* strB=(char*)malloc(10000);
char* strC=(char*)malloc(10000);
for(int i=1; i<=T; i++)
{
cin>>strA;
cin>>strB;
int len1=strlen(strA);
int len2=strlen(strB);
char2num(strA);
char2num(strB);
int strC_len=add_str(strA, len1, strB, len2, strC);
cout<<"Case "<<i<<':'<<endl;
outputchar(strA, len1);
cout<<" + ";
outputchar(strB, len2);
cout<<" = ";
output_result(strC, strC_len);
if(i!=T)
cout<<endl<<endl;
else cout<<endl;
}
free(strA);
free(strB);
free(strC);
return 0;
}
题目链接