首页 > 编程语言 >挑战用很多种方法解决A+B(c++)

挑战用很多种方法解决A+B(c++)

时间:2023-10-22 16:12:40浏览次数:30  
标签:opt 多种 int 挑战 namespace c++ num main op

写在前面的

本文章主要是博主自己想写。水篇文章。

正常作法

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a,b;
	cin>>a>>b;
	cout<<a+b;
	return 0;
}

数组

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a[3];
	cin>>a[1]>>a[2];
	cout<<a[1]+a[2];
	return 0;
}

枚举

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a,b;
	cin>>a>>b;
	for(int i=INT_MIN;i<=INT_MAX;i++){
		if(i==a+b){
			cout<<i;
			break;
		}
	}
	return 0;
}

二分

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a,b;
	cin>>a>>b;
	int l=INT_MIN,r=INT_MAX;
	while(l<=r){
		int mid=l+r>>1;
		if(mid==a+b){
			cout<<mid;
			break;
		}
		else if(mid<a+b)l=mid+1;
		else r=mid-1;
	}
	return 0;
}

前缀和

#include<bits/stdc++.h>
using namespace std;
int main(){
	int a[10],s[10];
	for(int i=1;i<=2;i++){
		cin>>a[i];
		s[i]=s[i-1]+a[i];
	}
	cout<<s[2]-s[0];
	return 0;
}

表达式

#include<bits/stdc++.h>
using namespace std;
#define int long long
stack<int>num;
stack<char>op;
map<char,int>h;
string s;
void eval(){
	int b=num.top();num.pop();
	int a=num.top();num.pop();
	char opt=op.top();op.pop();
	if(opt=='+')num.push(a+b);
	else if(opt=='-')num.push(a-b);
	else if(opt=='*')num.push(a*b);
	else if(opt=='/')num.push(a/b);
	else if(opt=='^')num.push(pow(a,b));
	return;
}
signed main(){
	h['+']=1,h['-']=1,h['*']=2,h['/']=2,h['^']=3;
	int a,b;
	cin>>a>>b;
	string aa,bb;
	while(a){
		aa+=char(a%10+'0');
		a/=10;
	}while(b){
		bb+=char(b%10+'0');
		b/=10;
	}
	reverse(aa.begin(),aa.end());
	reverse(bb.begin(),bb.end());
	s+=aa;
	s+="+";
	s+=bb;
	for(int i=0;i<s.size();i++){
		if(s[i]>='0'&&s[i]<='9'){
			int tmp=0,j=i;
			while(j<s.size()&&s[j]>='0'&&s[j]<='9'){
				tmp=tmp*10+(s[j]-'0');
				j++;
			}
			num.push(tmp);
			i=j-1;
		}
		else if(s[i]=='('){
			op.push(s[i]);
		}
		else if(s[i]==')'){
			while(op.size()>1&&op.top()!='(')eval();
			op.pop();
		}
		else{
			while(op.size()&&h[op.top()]>=h[s[i]])
				eval();
			op.push(s[i]);
		}
	}
	while(op.size())eval();
	cout<<num.top();
	return 0;
}

持续更新中。

标签:opt,多种,int,挑战,namespace,c++,num,main,op
From: https://www.cnblogs.com/xdh2012/p/17780577.html

相关文章

  • C++零基础教程(引用)
    (文章目录)前言本篇文章我们来讲解C++中非常重要的一个概念,这个概念就是引用,引用在C++中经常使用,下面就让我们来看看到底什么是引用吧。一、引用概念介绍及使用方法在C++中,引用是一种别名,它允许我们使用一个已经存在的对象来创建一个新的名称。引用提供了一种更直观、简洁和安......
  • C++中的RTTI机制、多继承中的虚函数
    C++中的RTTI机制基类有虚函数时才能实现RTTI机制:基类无虚函数时,typeid(*pA)返回的是pA声明时的类型。基类有虚函数时,typeid(*pA)返回的是pA指向对象的类型。比较两个带有虚函数的类的对象是否相等if(typeid(*a)==typeid(B))if(dynamic_cast<B*>(a)):如果能够成功向......
  • [极客大挑战 2019]FinalSQL
    参考文章:https://blog.csdn.net/qq_60829702/article/details/127445276https://blog.csdn.net/wp568/article/details/132513988......
  • C++ 读写锁
    官网:https://zh.cppreference.com/w/cpp/thread/shared_mutex1.何为读写锁相比互斥锁,读写锁允许更高的并行性,互斥量要么锁住状态要么不加锁,而且一次只有一个线程可以加锁。读写锁可以有三种状态:读模式加锁状态;写模式加锁状态;不加锁状态;只有一个线程可以占有写模式的读写......
  • C++中的继承
    一、继承的概念与定义1、继承的概念继承机制是面向对象程序设计实现代码复用的重要手段,它允许程序员在保持原有类特性的基础上进行拓展,增加功能,我们把原本的类称之为父类或者基类,新产生的类称之为子类或者派生类。继承体现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过......
  • vs 禁用c++编译警告提示的两种方式
    1.禁用单个cpp文件编译警告#pragmawarning(disable:警告号)如:当前提示C4305警告;加入禁用单个cpp文件编译警告;结果:编译警告消失.2.全局禁用指定警告效果如下 翻译搜索复制......
  • C++变量类型
    C++变量类型变量的名称可以由字母、数字和下划线组成。它必须以字母或下划线开头。类型描述bool布尔类型,存储值为true或false,占用1个字节char字符类型,用于存储ASCII字符,通常占用1个字节int整数类型,通常用于存储普通整数,通常占用四个字节float单精度浮点值......
  • C/C++ C2679 二元“<<”: 没有找到接受“XXX”类型的右操作数的运算符(或没有可接受的
    今天在做一个C++项目时遇到了如下问题: 找了好久的百度,结果发现只要把这段报错的程序换一下位置,放到运算符重载函数的下面就可以了,因为编译器是按顺序执行的。。。 ......
  • c++指针相关
    常量指针(PointertoConstant)定义:一个指向常量的指针。这意味着指针指向的值不能被修改,但指针本身可以被修改,即可以重新指向其他地址。声明:constType*pointerName;constint*p1;intx=10,y=20;p1=&x;//Valid*p1=50;//Errorp1=&y;//Valid指针......
  • c++默认实参
    参考:默认实参#include<iostream>voidf(inta,intb=1);//只要前面声明了b的值,后面b可以不给默认值voidf(inta=2,intb){std::cout<<a<<''<<b<<'\n';}intmain(){f();}......