(java)2的幂次方

news/2025/1/3 8:14:18/

题目描述

何一个正整数都可以用2的幂次方表示。例如:137=2^7+2^3+2^0

同时约定幂次方用括号来表示,即a^b可表示为a(b)。由此可知,137可表示为: 2(7)+2(3)+2(0)

进一步:7= 2^2+2+2^0   (21用2表示)

               3=2+2^0  

所以最后137可表示为:

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

又如:1315=2^10 +2^8 +2^5 +2+2^0

所以1315最后可表示为:

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

输入:正整数(n≤20000)

输出:符合约定的n的0,2表示(在表示中不能有空格)

输入格式

        一个正整数

输出格式   

        符合约定的n的0,2表示(在表示中不能有空格)

      样例输入

        73

     样例输出     

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

算法分析

参考博文:https://blog.csdn.net/C20190413/article/details/72625704

 为了寻找规律,我们先列举出1~9的幂次方。

1   2(0)

2   2

3   2(0)+2

4  2(2)

5  2(2)+2(0)

6  2(1)+2(2)

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

8  2(3)=>2(2(0)+2)

9  2(0)+2(3)=>2(2(0)+2)+2(0)

我们不难发现,这其实是一个递归的过程,可以把1,2,3,4作为原子解,从5之后的整数就可以递归求解,如果指数不能用2(0),2,2(2)表示则继续递归分解。

递归模型:

程序实现

public class power {public static int mypower(int x){if(x <= 4){switch(x){case 0 :break;case 1 ://2^0System.out.print("2(0)");break;case 2 ://2^1System.out.print("2");break;case 3 ://2^0 + 2^1System.out.print("2(0)+2");break;case 4 ://2(2)System.out.print("2(2)");break;default :break;}}else {int i = 1;for(;Math.pow(2,i)<=x;i++);System.out.print("2(");mypower(i - 1);System.out.print(")");if (x != Math.pow(2, i - 1))System.out.print("+");mypower(x - (int) Math.pow(2, i - 1));}return 0;}
}

运行结果

附:程序源码

import java.util.Scanner;
public class power {public static int mypower(int x){if(x <= 4){switch(x){case 0 :break;case 1 ://2^0System.out.print("2(0)");break;case 2 ://2^1System.out.print("2");break;case 3 ://2^0 + 2^1System.out.print("2(0)+2");break;case 4 ://2(2)System.out.print("2(2)");break;default :break;}}else {int i = 1;for(;Math.pow(2,i)<=x;i++);System.out.print("2(");mypower(i - 1);System.out.print(")");if (x != Math.pow(2, i - 1))System.out.print("+");mypower(x - (int) Math.pow(2, i - 1));}return 0;}
}public class MyPow {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int x = sc.nextInt();power.mypower(x);}
}

 


http://www.ppmy.cn/news/678503.html

相关文章

用计算机怎么算3分之2次方,64的3分之2次方怎么算啊

64的3分之2次方怎么算啊以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01; 64的3分之2次方怎么算啊 你好&#xff0c;很高兴为你解答 64的3分之2次方这样算 6416 16开3次方16 64的3分之2次方16…

为什么byte的最大是2的7次方减一而最小是负2的7次方

简书 来我们一步步分析分析&#xff1a; 1.byte占用8位&#xff0c;每位用0或1表示&#xff0c;能够表示256(2^8)个数据。 2.这8位分为符号位&#xff08;最高位&#xff09;和数值位&#xff08;剩余七位&#xff09;&#xff0c;符号位0表示正数&#xff0c;1表示负数。 …

7-53 2的n次方

计算2的n次方&#xff0c;n由用户输入 输入格式: 输入一个正整数 输出格式: 输出一个正整数 输入样例: 5输出样例: 32 #include<bits/stdc.h> using namespace std; double a; int main() {int b;cin>>b;apow(2,b);printf("%0.0lf",a); }

求2的n次方对1e9+7的模

问题引出 有如下问题&#xff1a; 求 2 n 2^n 2n mod (1e97)&#xff0c;其中1< n < 1 0 100000 10^{100000} 10100000。 首先明确一下此类问题的几种算法&#xff0c;首先朴素算法&#xff0c;即暴力循环求解&#xff0c;是O(N)复杂度&#xff0c;适用范围应该是n小于…

常见进制转换

常见进制转换 一. 进制概述 进制也就是进位计数制&#xff0c;是人为定义的带进位的计数方法&#xff08;有不带进位的计数方法&#xff0c;比如原始的结绳计数法&#xff0c;唱票时常用的“正”字计数法&#xff0c;以及类似的tally mark计数&#xff09;。 对于任何一种进制…

Shell中的流程控制(if/case/for/while)

文章目录 Shell中的流程控制&#xff08;if/case/for/while&#xff09;1 if判断1.1 单分支1.2 多分支 2. case语句3 for循环3.1 第一种写法 (())3.2 第二种写法 in 4 while循环4.1 demo14.2. demo2测试let Shell中的流程控制&#xff08;if/case/for/while&#xff09; 1 if判…

VRP基础操作

目录 一、华为VRP 1.1、VRP介绍 1.2、设备管理接口 1.3、Console口登录 1.4、参数配置 二、华为VRP命令行基础 2.1、真机设备初始化启动 2.2、命令行视图 2.3、命令行功能 2.4、命令行在线帮助 2.5、配置系统时钟 2.6、配置标题消息 2.7、命令等级 2.8、用户界面…

Java_Learning

Java实战 21例 文章目录 第一章 类与对象1.1 面向对象面向对象三个主要特征&#xff1a; 1.2 类与对象1.3 对象内存分析1.4 对象引用分析1.5 引用与垃圾产生分析1.6.1 成员属性封装处理1.6.2 **this**有三种用法&#xff1a;1.7 构造方法与匿名对象1.8 简单Java类&#xff08;超…