九度1113

来源:互联网 发布:淘宝店招什么意思 编辑:程序博客网 时间:2024/06/17 12:15
#include<stdio.h>    int main(){      int m,n;      while(scanf("%d %d",&m,&n) != EOF){          if(m==0 && n==0)    break;          int num,sum,left,right;          num=sum=1;          left=m*2;                      //左孩子节点的数值           right=m*2+1;                   //右孩子节点的数值           while(right<=n){        //若为满二叉树,则right可以取到n               num=num*2;             //从节点m向下,每向下一层,节点数量翻倍               sum+=num;              //将每层节点数相加,得到子节点总数               left=left*2;              right=right*2+1;       //最左节点和最右节点           }          if(left<=n){                   //不是满二叉树,right超出n的范围               sum=sum+(n-left+1);    //加上最下面一层的子节点个数           }          printf("%d\n",sum);      }      return 0;  }