当前位置: 代码迷 >> C语言 >> [讨论]请问有谁知道(编程的)8进制转换为10进制的原理
  详细解决方案

[讨论]请问有谁知道(编程的)8进制转换为10进制的原理

热度:158   发布时间:2005-01-10 15:39:00.0
[讨论]请问有谁知道(编程的)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); }

搜索更多相关的解决方案: 进制  原理  int  main  

----------------解决方案--------------------------------------------------------
他是从高位开始计算的,循环中首先得出高位的数字,如果他不是最低位,下一次将他乘以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')才相当把字符型的转换为整型数的大小了。
----------------解决方案--------------------------------------------------------
  相关解决方案