#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int fun(char *p)
{int n;
/**********found**********/
n=*p-'0';
p++;
while(*p!=0) {
/**********found**********/
n=n*8+*p-'0';
p++;
}
return n;
}
main()
{char s[6]; int i; int n;
printf("Enter a string (Ocatal digits): "); gets(s);
if(strlen(s)>5){printf("Error: String too longer !\n\n");exit(0);}
for(i=0; s[i]; i++)
if(s[i]<'0'||s[i]>'7')
{printf("Error: %c not is ocatal digits!\n\n", s[i]);exit(0);}
printf("The original string: "); puts(s);
n=fun(s);
printf("\n%s is convered to integer number: %d\n\n",s,n);
}
--------------------------------------------------------------------------------------
请问 n=n*8+*p-'0'; ,,为什么要这样算?,,还有:为什么要算 n=*p-'0'; 偏移值?我没看懂用这种方法求出来的是10进制,能从数学上,给我解释一下吗?
我无法理解这种算法---我只知道:八进制转10进制: 例如: 12345 转10进制: 应该是——》5*8^0+4*8^1+3*8^2+2*8^3+1*8^4
追答so,反过来写不就是
1*8^4+2*8^3+3*8^2+4*8^1+5*8^0
然后就是
((((0+1)*8+2)*8+3)*8+4)*8+5
即
int fun(char *p)((((0+1)*8+2)*8+3)*8+4)*8+5
1*8^4+2*8^3+3*8^2+4*8^1+5*8^0
虽然这两个的结果是一样的,但是我还是不知道,具体的相互转化过程,能麻烦你具体一点儿吗?
这样我才能理解得更透彻
((((0+1)*8+2)*8+3)*8+4)*8+5
这个算法的实现代码就是
int fun(char *p)也就是你上面贴的代码的美化后的结果
1*8^4+2*8^3+3*8^2+4*8^1+5*8^0 这种算法是进制转换的公式,这个数学课上面讲过,所以我懂。可是:
((((0+1)*8+2)*8+3)*8+4)*8+5 这个是进制转换的公式吗? 是什么公式
1*8^4+2*8^3+3*8^2+4*8^1+5*8^0
((((0+1)*8+2)*8+3)*8+4)*8+5
这不是完全等效的吗!!!