首页 > 其他分享 >P1010 [NOIP1998 普及组] 幂次方

P1010 [NOIP1998 普及组] 幂次方

时间:2024-05-04 12:13:33浏览次数:34  
标签:int P1010 137 NOIP1998 次方 define

题目:P1010 [NOIP1998 普及组] 幂次方

[NOIP1998 普及组] 幂次方

题目描述

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

同时约定次方用括号来表示,即 a^b 可表示为 a(b)。

由此可知,137 可表示为 2(7)+2(3)+2(0)

进一步:

$7= 22+2+20 ( 2^1 用 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+1$

所以 1315 最后可表示为 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)。

输入格式

一行一个正整数 n。

输出格式

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

样例 #1

样例输入 #1

1315

样例输出 #1

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

原题链接

思路:
本题数据不大,所以可以直接暴力分解就可以解答。

方法一:

点击查看代码
#include <bits/stdc++.h>
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define pii pair<int,int>
#define inf 0x3f3f3f3f
#define ll long long
#define el '\n'
using namespace std;
int n;
void f(int x)
{
	for (int i = 14; i >= 0; i--) {
		if ((1 << i) <= x) {
			if (i == 0) cout << "2(0)";
			else if (i == 1) cout << "2";//2个特判
			else {
				cout << "2(";
				f(i);
				cout << ")";
			}
			x -= (1 << i);
			if (x) cout << "+";//x!=0,代表没用分解完,需要加个“+”
		}
	}
}
void solve()
{
	cin >> n;
	f(n);
}

int main()
{
	ios;
	solve();
	return 0;
}

标签:int,P1010,137,NOIP1998,次方,define
From: https://www.cnblogs.com/yingdaomayilsl/p/18172153

相关文章

  • 二的幂次方判断——使用位运算-来源于lowbit操作
     解法:位运算的使用这里需要就是了解位运算的使用了lowbit函数x&-x这种算法其实是利用了计算机的补码性质。计算机为了表示负数,将对应的正数二进制全部取反再加一。lowbit是为了获取一个数的二进制中最低位的1对应的值,比如lowbit(10(10))=10(2),因为10的二进制表达是1010。......
  • 利用C语言进行常见的数学运算:一元二次方程求根
    从键盘输入a,b,c的值,编程计算并输出一元二次方程ax2+bx+c=0的根并保留两位小数.#include<stdio.h>//使用printf,scanf函数.#include<math.h>......
  • 扩展欧几里得 解二元一次方程组
    扩展欧几里得: 最大公约数-OIWiki(oi-wiki.org) intexgcd(inta,intb,int&x,int&y){if(!b){x=1,y=0;returna;}intd=exgcd(b,a%b,y,x);inttmp=x;x=y;y=tmp-(a/b)*y;returnd;}P5656【模板】二元一次不定......
  • P9750 [CSP-J 2023] 一元二次方程 题解
    题面。直接依照题意模拟即可,注意细节。细节第一注意输出分式时分母为\(1\)不输出,分子为\(0\)直接输出零且不带正负号。第二约分时,\(gcd\)内的两个数应该都是非负实数。第三可以单独输出符号,注意别有多余的符号。第四当方程有两根且均是有理数时,要根据\(2a\)的正......
  • 实验3-11 求一元二次方程的根
    本题目要求一元二次方程ax2+bx+c=0的根,结果保留2位小数。(注意:0.00会在gcc下被输出为-0.00,需要做特殊处理,输出正确的0.00。)输入格式:输入在一行中给出3个浮点系数a、b、c,中间用空格分开。输出格式:根据系数情况,输出不同结果:1)如果方程有两个不相等的实数根,则每行输出一个根,先......
  • 使用QR分解 求一元四次方程的根
            在求特征值的时候,通过QR迭代后就是一个拟上三角矩阵,但不一定是上三角矩阵。        在一定条件下,由QR算法生成的序列{Ak}收敛为Schur分块上三角形,对角块按特征值的模从大到小排列。但有特殊情况,当收敛结果为Schur分块上三角形时,序列{Ak}的对角块以上......
  • 洛谷 P1008 [NOIP1998 普及组] 三连击
    这道题我们可以用桶排序来做,代码如下:#include<bits/stdc++.h>//万能头 usingnamespacestd;//好习惯 inta[10];//一个桶数组,来确定是否有重复的 intmain(){   ints1,s2,s3;//定三个函数,用于判断    intsum=0;//用于判断数字是否重复    for(int......
  • P1024 [NOIP2001 提高组] 一元三次方程求解
    题目描述有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在 −100 至 100 之间),且根与根之差的绝对值 ≥1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后......
  • C语言经典例题(8) --- 进制A+B、网购、及格分数、最高分数、计算一元二次方程
    文章目录1.进制A+B2.网购3.及格分数4.最高分数5.计算一元二次方程1.进制A+B题目描述:输入一个十六进制数a,和一个八进制数b,输出a+b的十进制结果(范围-231~231-1)。输入描述:一行,一个十六进制数a,和一个八进制数b,中间间隔一个空格。输出描述:一行,a+b的十进制结果......
  • HashMap的数组最大容量为什么要设计为2的30次方?而不是2的31次方-1?数组容量为什么一定
    目录问题 数组容量为什么一定要设计为2的幂(2的n次方)?1、首先要清楚HashMap的底层基本原理2、再来看下怎么通过hash值决定存放在哪个桶中?首先看下hash值再看下怎么确定当前key存放在哪个数组下标下的为什么要做按位与而不用模运算符%?为什么要n-1呢?n是一个什么样的数......