5.22递归实现数制转换

Q:将输入的二进制转换为十进制表达。

#include"stdio.h"
#include"math.h"

int biTode(int n,int *sum,int *m) {
	char c;
	scanf("%c",&c);
	if(c!='#') {
		*m=*m+1;
		biTode(n+1,&(*sum),&(*m));
	}
	if(c=='1')	*sum=*sum+pow(2,(*m)-n-1);
}
 
	
int main() {
	int sum=0,m=0;
	printf("input a binary number ending for '#'
");
	biTode(0,&sum,&m);
	printf("the decimal digit is
");
	printf("%d ",sum);
	return 0;
}

  分析:算法中参数sum用来记录累加和。参数m随着递归的深入不断加1,并且递归结束m的值也不会发生变化。因为参数sum和m都要在递归中保持值得不变,因此采用指针传递方式。参数n的值随着递归的深入不断加1,但是每一层的递归n的取值都不同。在将二进制转换为十进制时,2的指数应为(*m)-n-1.输入的二进制数以字符形式存储,当输入字符#时,表示二进制字符串输入结束。在调用该算法时,参数的初值都为0。

拥抱明天! 不给自己做枷锁去限制自己。 别让时代的悲哀,成为你人生的悲哀。
原文地址:https://www.cnblogs.com/dd2hm/p/6806928.html