#include<stdio.h>
#include<string.h>
int main()
{
int i,j,k,n,m,a[110],b[110],max,c[110];
char s[110],ss[110];
while(gets(s),gets(ss))
{
k=0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
n=strlen(s);
m=strlen(ss);
for(i=n-1;i>=0;i--)
a[k++]=s[i]-'0';//逆序存盤,以便相加的時候從個位開始相加
k=0;
for(i=m-1;i>=0;i--)
b[k++]=ss[i]-'0';
max=n;
if(m>max)
max=m; //找到兩個數中較長的那個
for(i=0;i<max;i++)
{
c[i]=a[i]+b[i]+c[i];
if(c[i]>=10)
{
c[i]=c[i]-10;
c[i+1]++;
}
}
while(c[max-1]==0&&max!=1)//去掉前綴0
max--;
for(i=max-1;i>=0;i--)
printf("%d",c[i]);
printf("\n");
}
return 0;
}
其中while(c[max-1]==0&&max!=1)//去掉前綴0
max--;
這兩句起到什么作用,沒有明白
uj5u.com熱心網友回復:
別人寫的程式,全靠猜。我猜1:防止輸入0003 5 輸出 0008;2:判斷是否有進位~~不過寫的是錯的,應該將:while(c[max-1]==0&&max!=1)//去掉前綴0
max--;
for(i=max-1;i>=0;i--)
改為:
while(c[max]==0&&max!=0)//判斷是否有進位,并去掉前綴0
max--;
for(i=max;i>=0;i--)


uj5u.com熱心網友回復:
這個注釋就已經寫的很明白了,是去掉前綴的0,只是處理不對LS說的是一種情況,但如果輸入合法資料
比如輸入 s="9", ss="98",為了方便說明,把長度110改為5
保存到陣列
a={9,0,0,0,0},b={8,9,0,0,0},max=2,max在紅字位置
相加結果
c={7,0,1,0,0}; max在紅字位置
要去掉前面的0,只需要定位max的位置,然后從max倒序
while(c[max]!=0&&max<陣列長度5) max++; 就可以了,因為上面紅字位置為'1', 所以while回圈成立,max變為3,即藍色的位置 {'7','0','1',0,0},然后退出while回圈
所以 for(i=max-1;i>=0;i--) 倒序輸出(從上面的藍色位置減1位開始,也就是就max-1開始)就可以得出結果
所以如果s和ss輸入前面帶0的資料,應該要去掉后再存入a和b才是正確的處理方法
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/154442.html
標籤:C語言
