long catio(char c[]);
{
int n,d;
char *q,*p;
long e=1,s=0;
for(q=p=c,n=0;*p!='\0' && *p>='0' && *p<='9';p++,n++,e*=10);
while(n>0)
{
d=*q++;
switch(d)
{
case 48: d=0;break; /*太長了,略*/
:
:
case 57: d=9;break;
}
s+=d*(e/=10);
n--;
}
return (s);
}
現在比較來看看,不過雖然這條程序是比我那個復雜,但是也有他的思路和可取之處。像在那個for循環了,一條命令帶過很方便也很簡潔。其實我們可以繼續改造這個程序,我們跟著老師的思路一步一步的把它進化,現在看看如下:
long catio(char c[]);
{
int n,d;
char *q,*p;
long e=1,s=0;
for(q=p=c,n=0;*p && *p>='0' && *p<='9';p++,n++,e*=10);
while(n>0)
{
d=*q++-'0';
s+=d*(e/=10);
n--;
}
return (s);
}
這樣是不是更簡化了,那么還可以再簡化下去嗎?前面的我們是可以做出來啊,當是老師說還可以更簡單,我們都只好懷著期待的心情去聽了。他一步一步的說出來,第一就是在s+d*(e/10)這里可以變為另一種形式,s=s*10+d,如果按照這樣又可以去掉一個多余的變量了,變量e就沒有了。接下來的更不可意議了,我不知道怎么說,看看程序先吧。
long catio(char *c);
{
long s=0;
for(;*p && *c>='0' && *c<='9';s=s*10+*c++-'0');
return (s);
}
大家看到了嗎?原來這么長的程序可以一再簡化到這個地步,這就是C語言的靈活了(我好像已經說了好幾遍了,真的沒有辦法,不得不贊嘆)。
今天就是這么一題,可真的有意外驚喜呢!好了,現在不寫了,還有十道練習題等著我去做呢,大家也要努力喔!