谁能帮我解释下这题啊?

谁能帮我解释下这题啊?
24.请编写一个函数fun,它的功能是:将一个字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。
24. long fun(char *p)
{long s=0,t;
int i=0,j,in=strlen(p),k,s1;
if(p[0]=='-')
i++;
for(j=i;j<=n-1;j++)------------
{t=p[j]-'0';
s1=10; 尤其这一段?
for (k=j;k<n-1;k++)
t*=s1;
s+=t; }---------------------------
if(p[0]=='-')
return -s;
else
return s;}
谢谢了
[457 byte] By [sophia_sophia] at [2008-4-9]
# 1
t是每位上的数字,比如
21=2*10+1;
234=2*10*10+3*10+4
aminconi-完美缺陷 at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...
# 2
你的问题是,,,,?
明确一下 你的意思是不是说把" 字符串形式的数字 " 变成 " 数字形式的数字"??
比如 char a[5]='123'转换成 int b=123 ?
先回答我的问题,如果是这个 .我有现成的以前自己编的,而且也有现成的 C标准函数.
Bennyatt at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...
# 3
我也不太清楚,给的题目上就是这样说的,是南开100题上的,
我想应该是这个意思吧
sophia_sophia at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...
# 4
好的你等着 我给你找找
我以前在大学有 现成的相关的好几个版本呢.
有的甚至有论文配备...
Bennyatt at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...
# 5
或者不用麻烦了,
帮我解释下就可以了

sophia_sophia at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...
# 6
aminconi(完美缺陷)的意思我大概明白了一点
那为什么要加这个循环啊 for (k=j;k<n-1;k++)
sophia_sophia at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...
# 7
for(j=i;j<=n-1;j++)//n为字符串的长度
{
t=p[j]-'0';//取出字符串的每一位并且转化为整型.
s1=10;
for (k=j;k<n-1;k++)//等价的转化一个字符串
t*=s1;//个,十,百,千……t是每位上的数字,比如21=2*10+1;234=2*10*10+3*10+4
s+=t; //(上面仁兄的例子举的非常好)

}
summerlemon-猫 at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...
# 8
噢,我明白了
谢谢各位了啊!呵呵
sophia_sophia at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...
# 9
PS: Bennyatt() 不用帮我找了喔,也要谢谢你,麻烦了
sophia_sophia at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...
# 10
哈哈 都要写完了...
我在上班..
刚才又被一个 BT的女人叫去干活...
Bennyatt at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...
# 11
long fun(char *p)
{
long s=0,t;
int i=0,j,n,k,s1;
n=strlen(p);//求有多长
if(p[0]=='-')
i++;
for(j=i;j<=n-1;j++)//------------
{
t=p[j]-'0';//这里是这样子的哦~~~
/*这个p[j]是个 ASC码值 '0'也是个 asc码值
你看呀,0 ~~9 的 ASC值 是 58~~57
假如这个 p[j]里头存储的字符是 '6' 它对应的ASC是 64
这个表达式的意思就是
t=64-58 正好是 6 注意了 这行写的数字都是真正的数字不是字符了
也可以这样写 t=p[j]-58*/
s1=10; // <--这个地方 是笨笨做法
//没有必要后面直接 *10多好 ~~节省一个变量空间了
for (k=j;k<n-1;k++)//《注意这里有改动 加括号了》
{
t*=s1;
}
/*举例说明 45623
假如我们处理 5 那么我们需要让 s+=5000
假如是 6 那就是 s+=600
这个循环解决 “"5"后面有多少个"0"的问题”
不过可以改进 用 pow()这个函数
pow(x,y)==x^y pow 在 math.h里
*/
s+=t;
}//---------------------------

if(p[0]=='-')
return -s;
else
return s;
}
/////////
嘎嘎 我都写完了也 贴上去~~
哈哈
Bennyatt at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...
# 12
真是谢谢你啊Bennyatt
还特意回了贴,解释得这么详细
呵呵,真是太麻烦你了,
sophia_sophia at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...
# 13
Bennyatt 不好意思,那天也么等你回就结了帖子,
不能多给你分了,真是不好意思啊:呵呵
不过助人乃快乐之本吗,谢谢嵝,呵呵
sophia_sophia at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...
# 14
嘎嘎 我在上班 无所谓的能帮上你我很高兴
就是上班空闲时间有限,有的时候闲一天,有的时候忙一天...
没准...
我还是新来单位的...
什么灵活都让我干,
嘎嘎,这周让我们回收IP 结果 访问路由的服务器 DOWN了,
不然我还是没时间给你会贴
互相帮助哦 ..我也有8会的
Bennyatt at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...
# 15
恩,呵呵..
sophia_sophia at 2007-10-26 > top of Msdn China Tech,C/C++,C语言...