c语言八进制转10进制
#include<stdio.h>#include<string.h>#include<stdlib.h>intfun(char*p){intn;/**********f...
#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进制,能从数学上,给我解释一下吗? 展开
#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进制,能从数学上,给我解释一下吗? 展开
2个回答
推荐于2017-09-30
展开全部
更多追问追答
追问
我无法理解这种算法---我只知道:八进制转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)
{
int n;
for(n=0;*p;n=n*8+*p++-'0');
return n;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询