zoukankan      html  css  js  c++  java
  • 结题报告

    题目:点此

    题意描述:

    任何一个正整数都可以用2的幂次方表示。例如:

        137=27+23+20

    同时约定方次用括号来表示,即ab可表示为a(b)。由此可知,137可表示为:

        2(7)+2(3)+2(0)

    进一步:7=22+2+20(21用2表示)

            3=2+20

    所以最后137可表示为:

        2(2(2)+2+2(0))+2(2+2(0))+2(0)

    又如:

        1315=210+28+25+2+1

    所以1315最后可表示为:

        2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

    思路:

    使用递归,如果要输出的是2,直接输出2;如果是1,输出2(0)。

    计算log2n(我的up_pow函数),并存储。

    先输出一个2,如果i也就是㏒2n不是一,输出左括号“(”,递归调用i,再输出右括号“)”。

    如果还有剩余(n-2i!=0)输出+,递归调用,然后结束函数。

    再main函数中,只需读入n,然后调用函数即可。

    犯的错误:

    1. 快速幂没加返回值。
    2. 有很多地方应是i不是i-1。
    3. 快速幂函数没加边界条件。

    收获:

    1. 要仔细,不要漏东西。

    代码:

    #include <iostream>
    using namespace std;
    int quick_pow(int index,int r){
    	if(r==0){
    		return 1;
    	}
    	if(r==1){
    		return index;
    	}
    	int data=1;
    	if(r%2!=0){
    		data=index;
    	}
    	int type=quick_pow(index,r/2);
    	data*=type*type;
    	return data;
    }
    int up_pow(int max){
    	int index=1,number=0;
    	while(index<max){
    		number++;
    		index<<=1;
    	}
    	if(index>max){
    		number--;
    	}
    	return number;
    }
    int f(int n){
    	if(n==1){
    		cout << "2(0)";
    		return 0;
    	}
    	if(n==2){
    		cout << "2";
    		return 0;
    	}
    	int i=up_pow(n);
    	cout << "2";
    	if(i!=1){
    		cout << "(";
    		f(i);
    		cout << ")";
    	}
    	n-=quick_pow(2,i);
    	if(n!=0){
    		cout << "+";
    		f(n);
    	}
    	return 0;
    }
    int main(){
    	int n;
    	cin >> n;
    	f(n);
    	return 0;
    }
    

      

  • 相关阅读:
    Pandas(二)描述统计与函数应用
    Pandas(一)数据结构和基本功能
    Numpy(下)
    Numpy(上)
    42th 逻辑的连续性 取决于 细节的理解-------------我是个厨子:类的调用vs 对象调用方法
    40th 要掀桌子么 还是尬坐吧
    爱的 大循环 :我爱世界杯
    39th 迷迷糊糊 二豆玩不转了
    Python中的可迭代对象
    爱的传送带: print(.format())
  • 原文地址:https://www.cnblogs.com/eason66-blog/p/P8758.html
Copyright © 2011-2022 走看看