首页 > 编程语言 >算法-位运算

算法-位运算

时间:2023-01-16 21:26:44浏览次数:44  
标签:运算 int res ++ 算法 num input include

思路:
将原始数组和添加重复数字的数组相抑或,最后的结果就是重复的数字。

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main(void) {
	int arr[1001] = {};
	srand((int)time(0)); 
	for(int i=0; i<1000; i++){
		arr[i] = i + 1;
	}
	arr[1000] = (rand()%1000) + 1;
	int index = (rand()%1000);
	
	arr[index] = arr[1000]^arr[index];
	arr[1000] = arr[1000]^arr[index];
	arr[index] = arr[1000]^arr[index];
	
	for(int i=0;i<1001;i++){
		cout<<arr[i]<<" ";
	}
	int x = 0;
	/*
	for(int i=1; i<=10;i++){
		x = x^i;
	}
	*/
	for(int i=0;i<1001;i++){
		x = x^arr[i]^i;
	}
	cout<<endl;
	cout<<x<<endl;
	return 0;
}

思路:直接挨个遍历。

思路1:不断右移并且判断最后一位是否为一。

#include <iostream>
using namespace std;
int main(void) {
	int num = 0;
	cin>>num;
	int res = 0;
	while(num){
		if(num&1)
			res++;
		num = num>>1;
	}
	cout<<res<<endl;
	return 0;
}

思路2:每次利用减一,然后被减数和结果相与,知道为零,循环次数就是一的个数。

#include <iostream>
using namespace std;
int main(void) {
	int num = 0;
	cin>>num;
	int res = 0;
	while(num){
		num = num & (num-1);
		res++;
	}
	cout<<res<<endl; 
	return 0;
}

思路:就是问二进制表示中是不是只有一个1,利用上一题思路直接出结果。

#include <iostream>
using namespace std;
int main(void) {
	int num = 0;
	cin>>num;
	int res = 0;
	while(num){
		num = num & (num-1);
		res++;
		if(res>1){
			break;
		}
	}
	cout<<(res==1)<<endl; 
	return 0;
}

思路: 取出奇数位偶数维,奇数位右移,偶数位左移,结果再相或。

#include <iostream>
#include <cstdio>
using namespace std;
int main(void) {
	int input = 0;
	int res = 0;
	cin>>input;
	int even = 0xaaaa;
	int odd = 0x5555;
	odd = input&odd;
	even = input&even;
	res = (odd<<1)|(even>>1);
	cout<<res<<endl;
	return 0;
}

思路:乘2取整

#include <iostream>
#include <math.h>
using namespace std;
int main(void) {
	char res[34] = {'0','.'};
	double input = 0;
	cin>>input;
	int times = 0;
	while(input>0){
		times++;
		if(times>32) break;
		input = input*2;
		if(input>=1){
			input--;
			res[times+1] = '1';
			continue;
		}
		res[times+1] = '0';
	} 
	if(input) cout<<"ERROR"<<endl;
	else for(int i = 0; i < 34; i++) cout<<res[i];
	return 0;
}

思路:k个k进制数字进行不进位加法结果为零。
先将数组中的数转换成k进制放入string存储,对其长度,逐位进行不进位加法,最终得出的结果再转换成十进制输出。

#include <iostream>
#include <algorithm>
#include <math.h>
#include <string>
using namespace std; 
/*
*	将传入的数字转换成base进制的数 
*/ 
string decTok(int dec,int k);

/*
*	将k进制转换成十进制 
*/
int kTodec(string ans,int k);


int main(void) {
	//k个k进制的数进行不进位加法,结果为零 
	int k = 3;
	int maxlen = 0;
	int nums[] = {1,1,1,3,3,3,5,5,5,9,6,6,6,7,7,7 };	
	string str[16];	
	for(int i = 0; i < 16; i++){
		str[i] = decTok(nums[i],k);
	}
	for(int i = 0; i < 16; i++){
		int len = str[i].size();
		maxlen = max(maxlen,len);
	}
	for(int i = 0; i < 16; i++){
		while(str[i].size() < maxlen){
			str[i] = "0" + str[i];
		}
	}
	
	//初始化结果字符
	string ans (maxlen,'0');
	for(int i = 0; i < 16; i++){
		for(int j = 0; j < maxlen; j++){
			ans[j] = char(((str[i][j] - '0') + (ans[j] - '0')) % k + '0');
		}
	}
	
	cout<<kTodec(ans,k)<<endl;
	return 0;
}



int kTodec(string ans,int k){
	int times = ans.size() - 1;
	int res = 0;
	for(int i = 0; i < ans.size(); i++){
		res += (ans[i]-'0') * pow(k,times--);
	}
	return res;
}


string decTok(int dec,int k){
	string ret = "";
	while(dec){
		ret += char(dec%k + '0');
		dec /= k;
	}
	reverse(ret.begin(),ret.end());
	return ret;
}

标签:运算,int,res,++,算法,num,input,include
From: https://www.cnblogs.com/poteitoutou/p/17050703.html

相关文章

  • 代码随想录算法训练营第六天 哈希法 | 242.有效的字母异位词 | 349. 两个数组的交集
    哈希表哈希表适用于快速判断元素是否存在于表中,针对于哈希碰撞,有拉链法和线性探测法拉链法碰撞的元素被储存在链表中,拉链法需要根据数据规模选择适当的表大小,既不造成表......
  • AI 八数码A_star算法问题-实验报告
    一题目要求:        八数码问题的A星搜索算法实现        要求:设计估价函数,并采用c或python编程实现,以八数码为例演示A星算法的搜索过程,争取做到直观、清......
  • AI A_star算法野人渡河-实验报告
    1、问题描述及实验要求       请用A*算法实现野人过河问题,(1)分析设计估价函数f(2)采用C语言或Python编程实现(代码中适当加注释,输出具有可读性)。       问题描......
  • AI K-means算法对数据进行聚类分析-实验报告
    1、问题描述及实验要求K-means算法对data中数据进行聚类分析(1)算法原理描述(2)算法结构(3)写出K-means具体功能函数(不能直接调用sklearn.cluster(Means)功能函数)具体函数功......
  • 代码随想录算法训练营第20天
    今日刷题4道 654.最大二叉树, 617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树● 654.最大二叉树题目链接/文章讲解:https://programmercarl.com/0654......
  • C语言最短路径[迪杰斯特拉算法][2023-01-16]
    C语言最短路径[迪杰斯特拉算法][2023-01-16]算法与数据结构课程设计要求一、 题目:最短路径二、课程设计报告要求1、设计目的(1)要求熟练掌握C语言的基本知识和编程技......
  • 五子棋html游戏代码与算法介绍
    五子棋html游戏代码与算法介绍运行图片目录路径五子棋.html五子棋算法进行下一个游戏的开发!注意事项我会把html文件、css文件提供下载地址,文件夹路径也展示给大家。但是图片......
  • 寒假算法学习第二周
    动态规划这个东西3步走首先给一个例子配合理解一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。1:首先确定数组含义a[N]这个东......
  • 矩阵运算
    首先salute一下这个论坛,我是在这里看到的:https://www.ilovematlab.cn/thread-18725-1-1.html  上面解释了正除,反除内容,面说一下奇异矩阵的概念:https://baike.baidu.c......
  • 算法学习01—Java底层的正整数与负整数
    算法学习01—Java底层的正整数与负整数本节课学到的知识编写一个方法,打印出int类型数字的二进制长什么样为什么int类型的最大值是2^32-1,最小值是-2^32......