首页 > 其他分享 >鲜花:基于位运算的 A+B Problem

鲜花:基于位运算的 A+B Problem

时间:2024-11-02 09:20:46浏览次数:3  
标签:运算 递归 鲜花 int 二进制 按位 Problem 进位 define

前置知识:二进制、按位与&、按位异或^、左移<<

按位异或的本质是二进制下不进位的加法,也就是对于每一位将值相加再直接对 \(2\) 取模。由于^+有相同之处,考虑什么时候两者不同,很明显是二进制下需要进位的时候,那么什么时候需要进位呢?枚举可知,只有两个数该位都为 \(1\) 是该位需要进位。该为都为 \(1\),这不就是按位与吗?然后考虑二进制下的进位,直接使用左移就可以解决。现在就可以递归求解了;边界就是x&y==0,此时直接返回 x^y。我们的递归次数是由最长的连续的 \(1\) 的长度决定的,所以最劣时间复杂度为 \(O(\log w)\)。

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define ri register int
#define inf 0x3f3f3f3f
int a,b;
il int jia(int x,int y)
{
	if(!(x&y))
	{
		return x^y;
	}
	return jia(x^y,(x&y)<<1);
}
int main()
{
	scanf("%d%d",&a,&b);
	printf("%d",jia(a,b));
	return 0;
}

递归常数大,那可不可以实现非递归呢?答案当然是肯定的,不然我就不会写这句话了。非递归的实现就是相同的思路。可以选择单开一个变量存原来的 \(a\),也可以利用a^b^b==a的性质原地算。

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define ri register int
#define inf 0x3f3f3f3f
int a,b;
int main()
{
	scanf("%d%d",&a,&b);
	while(a&b)
	{
		a=a^b;
		b=((a^b)&b)<<1;
	}
	printf("%d",a^b);
	return 0;
}

递归版31ms,非递归30ms,跑的也不算太慢。其重点是可以扩展到使用bitset实现的高精度。但是还没完工。

标签:运算,递归,鲜花,int,二进制,按位,Problem,进位,define
From: https://www.cnblogs.com/ywhhdjser-97/p/18521615

相关文章

  • 嵌入式课程day05-C语言运算符和选择结构
    4.8其他运算符自增自减:++--三目运算符:?:复合运算符:+= -=*=/=%= &= |=^= <<=>>=逗号运算符:,4.8.1自增自减:++--实现变量的+1或者-1操作++:单目运算符前置:++a后置:a++①如果++运算符作为单独语句使用++在前,++在后没有区别②如果++运算符参与其他......
  • abc318_g Typical Path Problem 题解 圆方树
    题目链接:https://atcoder.jp/contests/abc318/tasks/abc318_g题目大意:给出一个有\(n\)个顶点和\(m\)条边的无向连通图\(G\),没有重边和自环。顶点的编号为\(1\simn\),边的编号为\(1\simm\),第\(i\)条边连接顶点\(u_i\)和\(v_i\)。给出图上三个不同的顶点\(A,B,C......
  • javascript 基本语法,变量,运算符【知识点整理】
    JavaScript(ES5)JavaScript的基本语法和变量变量声明与变量赋值的方法:vara=5;vara=5;varb=4;vara=3,b=2;vara,b,c=5;vara=b=c=1;变量的命名规范首字符:英文和下划线组成:英文数字下划线禁忌:关键字、保留字##Unicode在HTML中,Unicode字符......
  • Web的鲜花智能推荐销售商城-附源码
    摘要现代人们对于鲜花的需求越来越高,鲜花销售市场也呈现出蓬勃的发展势头。然而,传统的鲜花销售通常面临一些问题,比如顾客往往需要花费大量的时间和精力在线下去寻找合适的鲜花,同时也难以获取到个性化的推荐服务。为了解决这些问题,智能推荐技术可以应用在鲜花销售商城中,帮助用......
  • 异或运算解决查找数组中出现奇数次元素
            假设有一个数组只有一个元素出现奇数次,需要查找这个出现奇数次的元素,怎么使用时间复杂度为O(n),空间复杂度为O(1),来解决这道题。以下是使用异或来解决这道题:publicstaticintselectOddTimesNum(int[]nums){intresult=0;for(intnum:nums......
  • JavaScript语法基础——变量,数据类型,运算符和程序控制语句(小白友好篇,手把手教你学会!)
     一、JavaScript概述JavaScript是一种高级编程语言,常用于网页开发和服务器端应用程序。它是一种动态类型语言,可以在浏览器中直接解释执行,而不需要编译。脚本(Script)是一种与计算机程序相关的指令集或代码块,用于执行特定的任务或操作。脚本通常用于自动化重复性的任务或进行特......
  • 【PTA 编程题 7-3 】矩形运算 #C语言
    代码#include<stdio.h>#defineMAXM10#defineMAXN10intmain(void){intn;scanf("%d",&n);inta[MAXM][MAXN];for(inti=0;i<n;i++){for(intj=0;j<n;j++){scanf("%d",&a[i][j]);......
  • 【算法笔记】位运算算法原理深度剖析
    【算法笔记】位运算算法原理深度剖析......
  • 嵌入式课程day04-C语言运算符和选择结构
    2.3运算符2.3.1运算符介绍运算符:具有一定运算规则的符号。操作数:运算符的操作对象。~a   ---a就是~运算符的操作数。---单目运算符:运算符只有一个操作数3+5---35就是+运算符的操作数。---双目运算符:运算符有2个操作数    表达式1?表达式2:表达......
  • Prometheus01 Prometheus基础, 部署与配置, Node Exporter, Pushgateway, PromQL 运算
    云原生监控系统Prometheus1Prometheus介绍1.2监控内容和方法1.2.2监控方法 Google的四个黄金指标1.延迟(Latency)服务请求所需要的时长,例如HTTP请求平均延迟2.流量(Traffic),也称为吞吐量3.错误(Errors)4.饱和度(Saturation)资源的整体利用率,包括CPU(容量、配......