NOIP幂次方
#include<stdio.h> int c[20] = { 1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768 };//由题意n最大为20000,所以最多会用到2的14次方 //为了防止mid+1出错,故写到15次方 int binarySearch(int x, int mid) { if (x >= c[mid] && x < c[mid + 1]) { return mid; } if (x >= c[mid + 1]) return 20; return -1; } int serch(int x) {//利用二分查找找到x的最大二次方 int left = 0; int right = 15; int mid; while (left <= right) { mid = (left + right) >> 1; if (binarySearch(x, mid) == -1) { right = mid - 1; } else if (binarySearch(x, mid) == 20) { left = mid + 1; } else { return mid; } } } void divite(int x) {//分治求解:因为每个整数的划分方法是一样的 if (x == 0) return; int flag = serch(x); int li = x - c[flag]; if (flag == 0) { printf("2(0)"); } if (flag == 1) { printf("2"); } if (flag > 1) { printf("2("); divite(flag); printf(")"); } if (li > 0) { printf("+"); divite(li); } } int main() { int n; scanf("%d", &n); divite(n); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)