中石油—2的幂次方(power)
问题 E: 2的幂次方(power)
时间限制: 1 Sec 内存限制: 64 MB
提交: 38 解决: 19
[提交][状态][讨论版]
题目描述
任何一个正整数都可以用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)
输入
输入:正整数(n≤20000)
输出
输出:符合约定的n的0,2表示(在表示中不能有空格)
样例输入
137
1315
样例输出
2(2(2)+2+2(0))+2(2+2(0))+2(0)
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0) 解题思路:题目要求输入一个数,然后输出相应的格式,首先要把一个数转变成二进制表示,存到一个字符型数组里,然后从左往右依次判断,如果其指数大于等于2,则输出'('之后,在递归调用本身,然后输出')',此时要注意判断后面是否还有数,如果有,要输出')+'.
做的时候要注意那几种情况,分情况讨论。 代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring> using namespace std; //判断c后面是否还有1,有则需要再输出+号。
bool pd(int c,char a[]){
for(int i=c+;i<;i++){
if(a[i]-''==){
return true;
}
}
return false;
} void zhuanerjinzhi(int n,char a[]){
int b[];
int i=;
while(n!=){
b[i++]=n%;
n=n/;
}
for(int j=;j<i;j++){
a[j]=b[i-j-]+'';
}
a[i]='\0';
} void f(int n){
char a[];
zhuanerjinzhi(n,a);
int cc=strlen(a);
for(int i=;i<cc;i++){
if((a[i]-'')==){
int b=strlen(a)-i-;
if(b>=){
printf("2(");
f(b);
if(pd(i,a)){
printf(")+");
}else{
printf(")");
} }
if(b==&&(a[i+]-'')==){
printf("");
}
if(b==&&(a[i+]-'')!=){
printf("2+");
}
if(b==){
printf("2(0)");
}
}
}
} int main()
{
int n;
while(scanf("%d",&n)!=EOF){
f(n);
printf("\n");
} return ;
}
中石油—2的幂次方(power)的更多相关文章
- 2的幂次方(power)
2的幂次方(power) 题目描述 任何一个正整数都可以用2的幂次方表示.例如:137=27+23+20同时约定方次用括号来表示,即ab 可表示为a(b). 由此可知,137可表示为:2(7)+2(3 ...
- Oracle计算数值型的幂次方——POWER()
Oracle计算数值型的幂次方 简介:幂次方就是幂函数的变形,在POWER(value1,value2)中,value1就是函数的底数,value2就是函数的指数.如:POWER(value1,val ...
- NOI-OJ 2.2 ID:8758 2的幂次方表示
思路 可以把任意一个数转化为2^a+2^b+2^c+...+2^n 例如137的二进制为10001001,这就等效于2^7+2^3+2^0 以上结果如何通过程序循环处理呢?需要把数字n分解为上述公式, ...
- 洛谷 P1010 幂次方 Label:模拟
题目描述 任何一个正整数都可以用2的幂次方表示.例如 137=2^7+2^3+2^0 同时约定方次用括号来表示,即a^b 可表示为a(b). 由此可知,137可表示为: 2(7)+2(3)+2(0) ...
- 算法题----称硬币: 2n(并不要求n是2的幂次方)个硬币,有两个硬币重量为m+1, m-1, 其余都是m 分治 O(lgn)找出假币
Description: 有2n个硬币和一个天平,其中有一个质量是m+1, 另一个硬币质量为m-1, 其余的硬币质量都是m. 要求:O(lgn)时间找出两枚假币 注意: n不一定是2的幂次方 算法1: ...
- 解题笔记-洛谷-P1010 幂次方
0 题面 题目描述 任何一个正整数都可以用2的幂次方表示.例如 137=2^7+2^3+2^0 同时约定方次用括号来表示,即a^b 可表示为a(b). 由此可知,137可表示为: 2(7)+2(3)+ ...
- P1010 幂次方 递归模拟
题目描述 任何一个正整数都可以用22的幂次方表示.例如 137=2^7+2^3+2^0137=27+23+20 同时约定方次用括号来表示,即a^bab 可表示为a(b)a(b). 由此可知,13713 ...
- p1010幂次方---(分治)
题目描述 任何一个正整数都可以用222的幂次方表示.例如 137=27+23+20137=2^7+2^3+2^0 137=27+23+20 同时约定方次用括号来表示,即aba^bab 可表示为a(b) ...
- 递归--练习9--noi8758 2的幂次方表示
递归--练习9--noi8758 2的幂次方表示 一.心得 找准子问题就好 二.题目 8758:2的幂次方表示 总时间限制: 1000ms 内存限制: 65536kB 描述 任何一个正整数都可以用 ...
随机推荐
- 【CodeForces 599A】D - 特别水的题4- Patrick and Shopping
Description meter long road between his house and the first shop and a d2 meter long road between h ...
- 【UVA 11401】Triangle Counting
题 题意 求1到n长度的n根棍子(3≤n≤1000000)能组成多少不同三角形. 分析 我看大家的递推公式都是 a[i]=a[i-1]+ ((i-1)*(i-2)/2-(i-1)/2)/2; 以i 为 ...
- Yii2分页
Yii中的分页功能主要由yii\web: Linkable接口.yii\widgets: LinkPager类和yii\data: Pagination类三个组成 yii\data: Paginati ...
- 高斯混合聚类及EM实现
一.引言 我们谈到了用 k-means 进行聚类的方法,这次我们来说一下另一个很流行的算法:Gaussian Mixture Model (GMM).事实上,GMM 和 k-means 很像,不过 G ...
- Intel 80x86 Linux Kernel Interrupt(中断)、Interrupt Priority、Interrupt nesting、Prohibit Things Whthin CPU In The Interrupt Off State
目录 . 引言 . Linux 中断的概念 . 中断处理流程 . Linux 中断相关的源代码分析 . Linux 硬件中断 . Linux 软中断 . 中断优先级 . CPU在关中断状态下编程要注意 ...
- Spring MVC:使用SimpleUrlHandlerMapping的一个简单例子
实现一个控制器ShirdrnController,如下所示: package org.shirdrn.spring.mvc; import java.util.Date; import javax.s ...
- MySQL------如何安装mysql-connector-java-5.1.38.zip
下载地址:http://dev.mysql.com/downloads/connector/j/ 安装mysql-connector-java-5.1.38.zip:1.解压文件->把里面的my ...
- 添加一个txt文件(例如在桌面),利用后台对文件写入内容
string str = "今天天气好晴朗,处处好风光."; //需要将字符串转化成字节数组 byte[] buffer = Encoding.Default.GetBytes(s ...
- 使用NPOI操作Excel(03、07)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using NPOI.SS. ...
- hud 2502 月之数
I think: AC : import java.util.Scanner; public class Main { public static void main(String[] args) { ...