當前位置:編程學習大全網 - 編程語言 - 求助,壹道ACM編程題。

求助,壹道ACM編程題。

運行的結果是TL?

表示給妳敲了個,以後應該養成良好的代碼習慣,模塊化,易讀懂。

------------------------------------

#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級軟件工程的信箱號碼是多少不?不知道就算了,謝了。

*/

  • 上一篇:北京java培訓分享軟件開發培訓課程內容有哪些呢?
  • 下一篇:phtony編程優勢?
  • copyright 2024編程學習大全網