這個是代碼:
#include <stdio.h>
#include<string.h>
int main(void) {
int s1[300]={0},s2[300]={0};
char a1[300],a2[300];
int length1,length2;
gets(a1);
gets(a2);
length1=strlen(a1);
length2=strlen(a2);
for(int i=length1-1,j=0;i>=0;i--)
{
s1[j]=a1[i]-'0';
j++;
}
for(int i=length2-1,j=0;i>=0;i--)
{
s2[j]=a2[i]-'0';
j++;
}
int length=length1>length2 ? length1:length;
for(int i=0;i<length;i++)
{
s1[i]=s1[i]+s2[i];
if(s1[i]<=10)
{
s1[i]=s1[i]-10;
s1[i+1]++;
}
}
if(s1[length]==0)
{
for(int i=0;i<=length;i++)
printf("%d",s1[i]);
}
else
{
for(int i=0;i<length;i++)
printf("%d",s1[i]);
}
}
最后if-else陳述句中length是s1,s2中最長位數的長度。根據分析得,取最極端情況,99999+99999。得到了數的長度為最長位數的長度加1。所以判斷陣列下標length的數是否為0?如果為0,這說明相加數后的長度為length。否則為length+1。
思路應該沒有問題吧 但是結果卻是這個。
uj5u.com熱心網友回復:
思路正確,細節沒處理好~


1:int length=length1>length2 ? length1:length; 應改為length2
2:if(s1[i]<=10) ,大于等于10 才要進位,改為 >=
3:for(int i=0;i<=length;i++),低位放在前的啊~~需要從高位開始輸出~ 改為比如:for(int i=length-1; i>=0; i--)
uj5u.com熱心網友回復:
除了LS說的if(s1[length]>0) length++; //最后一位還有判斷是否有效 (雖然你也判斷了,不過if(s1[length]==0) 的else里沒修改length)
去掉 if(s1[length]==0) 和 else 的代碼,最后直接
for(int i=length-1; i>=0; i--) 輸出就好了
另外,上面說了,length可能會增大1位的 if(s1[length]>0) length++; 所以陣列s1陣列長度最好設301,防止越界
uj5u.com熱心網友回復:
謝謝,運行通過了。
uj5u.com熱心網友回復:
題目要求的是200位,我設定300位是可以的。不過細節之處也是值得我學習的。謝謝啦

uj5u.com熱心網友回復:
輸出哪個部分的if判斷也是弄反了的if(s1[length]==0)
{
for(int i=length-1;i>=0;i--)
printf("%d",s1[i]);
}
else
{
for(int i=length;i>=0; i--)
printf("%d",s1[i]);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/117288.html
標籤:C語言
上一篇:鏈表
