表示給妳敲了個,以後應該養成良好的代碼習慣,模塊化,易讀懂。
------------------------------------
#include <stdio.h>
#include <string.h>
#define clear(a) memset(a,0,sizeof(a))
char A[510],B[510],Ans[510];
int La,Lb,Lans,L;
void Swap(char &a,char &b)
{
char Temp=a;
a=b;
b=Temp;
}
int Maxx(int x,int y)
{
return x>y?x:y;
}
void Turn(int L,char List[])
{
for (int i=1;i<=L;i++)
{
List[i]=List[i]-48;
}
for (int i=1;i<=L/2;i++)
{
Swap(List[i],List[L-i+1]);
}
}
void Add(char A[],char B[],int L,char C[],int &Lc)
{
int K;
char Temp;
clear(C);
for (int i=1;i<=L;i++)//求和
{
C[i]=A[i]+B[i];
}
for (int i=1;i<=L;i++)//進位
{
K=i-1;Temp=C[i];
C[i]=0;
while (Temp>0)
{
K++;
C[K]+=Temp%10;
Temp=Temp/10;
}
}
Lc=Maxx(K,L);
}
void Back(char List[],int L)
{
for (int i=1;i<=L;i++)
{
List[i]+='0';
}
for (int i=1;i<=L/2;i++)
{
Swap(List[i],List[L-i+1]);
}
}
int main(void)
{
//freopen("Data.in","r",stdin);
//freopen("Data.out","w",stdout);
clear(A);clear(B);
while (scanf("%s %s\n",&A[1],&B[1])!=EOF)
{
La=strlen(&A[1]);
Lb=strlen(&B[1]);
Turn(La,A);//翻轉
Turn(Lb,B);//翻轉
L=Maxx(La,Lb);
Add(A,B,L,Ans,Lans);//求和
Back(Ans,Lans);
printf("%s\n",&Ans[1]);
clear(A);clear(B);clear(Ans);
}
return 0;
}
//----------分割線--------------------------------------------------------------------------
妳的程序
#include <stdio.h>
#include <string.h>
int main ()
{
char change[502];
char a[502];
char b[502];
char c[502];
int i,j,t,l1,l2,s,jw;
while(scanf("%s%s",&a,&b)==2)
{
l1=strlen(a);
l2=strlen(b);
if(l1<l2)
{
t=l1;//交換寫錯了!!
l2=t;//建議以後交換寫成過程,減少代碼量,而且可以防止錯誤。
l1=l2;
}
for(i=0;i<l1;i++)
{
change[i]=a[i];//發覺這個地方錯了沒得?
b[i]=change[i];//建議以後交換寫成過程,減少代碼量,而且可以防止錯誤。
a[i]=b[i];//錯了~!!!
}
jw=0;
//這裏是否要給妳的i重新賦值,如果沒有,那麽i是從l1開始的,不知是否符合妳的想法。
while(l2>0)//妳寫這個循環的時候可能有點混亂哇~~這個加法混亂牢,自己梳理梳理下。
{
s=(a[l1-1]-48)+(b[l2-48])+jw;//這句話首先b[l2-48]我肯定妳是寫錯了,貌似計算
if(s>=10) //方向有點問題哈~~ 這裏
{
jw=s%10;
s-=10;
}
else
jw=0;
c[i]=s+48;
l1--;
l2--;
i++;
}
while(l1>0)// 這裏有點沒看懂妳啥意思。
{
c[i]=a[l1-1]+jw;
if((c[i]-48)==10)
{
jw=1;
c[i]='0';
}
else
jw=0;
l1--;
i++;
if(jw==1)
c[i++]='1';
}
for(;i>0;i--)
{
printf("%s",c[i-1]);
}
printf("\n");
memset(a,'\0',sizeof(a));
memset(b,'\0',sizeof(b));
memset(c,'\0',sizeof(c));
memset(change,'\0',sizeof(change));//memset()函數的使用可以參看我的程序,使用宏定義使用更為方便。
}
return 0;
}
//-----------------------------------------------
/*
看妳問題裏面有ACM三個字於是決定幫妳找錯誤,今年已然悲劇,無出線,無金。寫代碼之前要明白自己應該幹
什麽,可以分為幾個步驟,每個步驟怎麽實現,不要直接壹坨寫在主函數裏面。切記切記。
ACM路還長,壹定要保持良好的代碼習慣和個人學習習慣,祝妳取得好成績。加油@
順便問句,令妳是川大的啊?知道川大軟件學院09級軟件工程的信箱號碼是多少不?不知道就算了,謝了。
*/