哪位高手能组解释一下
谁能组解释一下。
题目:八进制转换为十进制
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);
}
我想到的当然是按权展开,n=n*8+*p- '0 '为什么就成了转后的结果??
好像不是按权展开呀??
------解决方案--------------------
指针P依次从高位往地位移动,*p- '0 '表示该位的数字值,n*8则表示前位(高位)乘以权
你假设P的值为123,依次走一遍就很清楚了
p指向1时
n = 0*8 + '1 ' - '0 ';
指向2时
n = 1*8 + '2 ' - '0 ';
指向3时
n = (1*8 + 2)*8 + '3 ' - '0 ';
或者
n = 1*8*8 + 2*8 + '3 ' - '0 ';
------解决方案--------------------
它的算法跟你所谓的“加权法”是完全等价,而且通常还比你的快,因为乘法的次数少。
比如对于8进制的“2345”
我知道你是想这样:
int i = 0;
i = i + 2 * 8 * 8 * 8;
i = i + 3 * 8 * 8;
i = i + 4 * 8;
i = i + 5;
一共6次乘法,4次加法。
而人家是这样的:
int i = 0;
i = i * 8 + 2;
i = i * 8 + 3;
i = i * 8 + 4;
i = i * 8 + 5;
这跟前面实际效果是完全一样的,但只用了4次乘法跟4次加法。
题目:八进制转换为十进制
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);
}
我想到的当然是按权展开,n=n*8+*p- '0 '为什么就成了转后的结果??
好像不是按权展开呀??
------解决方案--------------------
指针P依次从高位往地位移动,*p- '0 '表示该位的数字值,n*8则表示前位(高位)乘以权
你假设P的值为123,依次走一遍就很清楚了
p指向1时
n = 0*8 + '1 ' - '0 ';
指向2时
n = 1*8 + '2 ' - '0 ';
指向3时
n = (1*8 + 2)*8 + '3 ' - '0 ';
或者
n = 1*8*8 + 2*8 + '3 ' - '0 ';
------解决方案--------------------
它的算法跟你所谓的“加权法”是完全等价,而且通常还比你的快,因为乘法的次数少。
比如对于8进制的“2345”
我知道你是想这样:
int i = 0;
i = i + 2 * 8 * 8 * 8;
i = i + 3 * 8 * 8;
i = i + 4 * 8;
i = i + 5;
一共6次乘法,4次加法。
而人家是这样的:
int i = 0;
i = i * 8 + 2;
i = i * 8 + 3;
i = i * 8 + 4;
i = i * 8 + 5;
这跟前面实际效果是完全一样的,但只用了4次乘法跟4次加法。