[讨论]请问有谁知道(编程的)8进制转换为10进制的原理
我已经有了这个的程序,但对里面的算法不清楚,Who can help me?
main() { char *p,s[6];int n; p=s; gets(p); n=0; while(*(p)!='\0') {n=n*8+*p-'0'; p++;} /*关键是这一句,没能悟出原理来,请帮忙*/ printf("%d",n); }
----------------解决方案--------------------------------------------------------
他是从高位开始计算的,循环中首先得出高位的数字,如果他不是最低位,下一次将他乘以8 ,然后再加上下一位的数字,以此类推。比如输入112;开始n=0,计算n=1;第二次循环n=1*8+1;n=9;第三次,n=9*8+2,n=74;
----------------解决方案--------------------------------------------------------
Thank you!
----------------解决方案--------------------------------------------------------
哪位高手有更好或更明了的设计方案,请告之,Thank you!
----------------解决方案--------------------------------------------------------
#include"stdio.h"
main()
{ char s[6];
int n,i;
gets(s);
for(i=0,n=0;s[i]!='\0';i++)
n=n*8+s[i]-'0';
printf("%d",n);
getch();
}
----------------解决方案--------------------------------------------------------
还是看不明白!
我是菜菜!
----------------解决方案--------------------------------------------------------
你现在只能可惜你是女孩
----------------解决方案--------------------------------------------------------
以下是引用aczhe在2005-1-19 21:25:40的发言:
#include"stdio.h"
main()
{ char s[6];
int n,i;
gets(s);
for(i=0,n=0;s[i]!='\0';i++)
n=n*8+s[i]-'0';
printf("%d",n);
getch();
}
在循环之前加入语句判断出字符串的长度后,然后再以这个长度为循环的终值这样循环速度更快,当然如果字符串更长的话,可以把循环变量申明成寄存器变量以加快速度 ----------------解决方案--------------------------------------------------------
[QUOTE]n=n*8+*p-'0';[/QUOTE]
对这句中的-'0'作用不明白,好像它是没有用的,但没了它,却就不能得到正确的答案来。谁能帮我解释,谢谢!是否与字符类型有关,因为这一句:char *p;
----------------解决方案--------------------------------------------------------
对不起,也许我明白了,我的理解是:(*p-'0')才相当把字符型的转换为整型数的大小了。
----------------解决方案--------------------------------------------------------