C++ C++;简单计算器(无if、开关、Case及其类型)
我试着做一个简单的计算器。有3个输入:C++ C++;简单计算器(无if、开关、Case及其类型),c++,calculator,C++,Calculator,我试着做一个简单的计算器。有3个输入: 第一 二号 操作员 使用编号选择操作员: 1='+' 2='-' 3='*' 4='/' 示例: 数字1=1,数字2=1,运算符=1,则方程为1+1=2 我不知道如何使这个等式成为可能。任何帮助都将不胜感激。谢谢 *注意:不使用数组或字符串,不使用大小写,不使用开关,不使用if,while,for 这是我的代码,但尚未完成,我需要更改运算符选择器 #include <iostream> using namespace std; int ma
1='+'
2='-'
3='*'
4='/'
示例:数字1=1,数字2=1,运算符=1,则方程为1+1=2 我不知道如何使这个等式成为可能。任何帮助都将不胜感激。谢谢 *注意:不使用
数组
或字符串
,不使用大小写
,不使用开关
,不使用if
,while
,for
这是我的代码,但尚未完成,我需要更改运算符选择器
#include <iostream>
using namespace std;
int main (){
int a, b, c, hasil;
cout << "Masukkan Bilangan 1 : ";
cin >> a;
cout << "Masukkan Bilangan 2 : ";
cin >> b;
cout << "Masukkan Operator ['(0 = +)' , '(1 = -)' , '(2 = *)', '(3 = /)' ] : ";
cin >> c;
hasil = a + (c * -2 + 1 )* b;
cout << "Hasilnya = " << hasil;
}
#包括
使用名称空间std;
int main(){
INTA、b、c、hasil;
cout>a;
cout>b;
cout>c;
hasil=a+(c*-2+1)*b;
cout您可以对不同的运算符使用不同的函数,然后使用“c”值作为函数表的索引来选择它们
#include <iostream>
using namespace std;
typedef int (*OperatorFunction)(int a, int b);
static int OperatorPlus(int a, int b)
{
return a + b;
}
static int OperatorMinus(int a, int b)
{
return a - b;
}
static int OperatorMultiply(int a, int b)
{
return a * b;
}
static int OperatorDivide(int a, int b)
{
return a / b;
}
OperatorFunction operators[] = { OperatorPlus, OperatorMinus, OperatorMultiply, OperatorDivide };
int main()
{
int a, b, c, hasil;
cout << "Masukkan Bilangan 1 : ";
cin >> a;
cout << "Masukkan Bilangan 2 : ";
cin >> b;
cout << "Masukkan Operator ['(0 = +)' , '(1 = -)' , '(2 = *)', '(3 = /)' ] : ";
cin >> c;
hasil = operators[c](a, b);
cout << "Hasilnya = " << hasil << "\n";
}
#包括
使用名称空间std;
类型定义int(*运算符函数)(int a、int b);
静态整数运算符Plus(整数a、整数b)
{
返回a+b;
}
静态整数运算符最小值(整数a、整数b)
{
返回a-b;
}
静态整数运算符乘法(整数a、整数b)
{
返回a*b;
}
静态整型运算符vide(整型a、整型b)
{
返回a/b;
}
运算符函数运算符[]={OperatorPlus,OperatorMinus,OperatorMultiply,operatorVide};
int main()
{
INTA、b、c、hasil;
cout>a;
cout>b;
cout>c;
hasil=运算符[c](a,b);
cout您可以对不同的运算符使用不同的函数,然后使用“c”值作为函数表的索引来选择它们
#include <iostream>
using namespace std;
typedef int (*OperatorFunction)(int a, int b);
static int OperatorPlus(int a, int b)
{
return a + b;
}
static int OperatorMinus(int a, int b)
{
return a - b;
}
static int OperatorMultiply(int a, int b)
{
return a * b;
}
static int OperatorDivide(int a, int b)
{
return a / b;
}
OperatorFunction operators[] = { OperatorPlus, OperatorMinus, OperatorMultiply, OperatorDivide };
int main()
{
int a, b, c, hasil;
cout << "Masukkan Bilangan 1 : ";
cin >> a;
cout << "Masukkan Bilangan 2 : ";
cin >> b;
cout << "Masukkan Operator ['(0 = +)' , '(1 = -)' , '(2 = *)', '(3 = /)' ] : ";
cin >> c;
hasil = operators[c](a, b);
cout << "Hasilnya = " << hasil << "\n";
}
#包括
使用名称空间std;
类型定义int(*运算符函数)(int a、int b);
静态整数运算符Plus(整数a、整数b)
{
返回a+b;
}
静态整数运算符最小值(整数a、整数b)
{
返回a-b;
}
静态整数运算符乘法(整数a、整数b)
{
返回a*b;
}
静态整型运算符vide(整型a、整型b)
{
返回a/b;
}
运算符函数运算符[]={OperatorPlus,OperatorMinus,OperatorMultiply,operatorVide};
int main()
{
INTA、b、c、hasil;
cout>a;
cout>b;
cout>c;
hasil=运算符[c](a,b);
在这个任务中,我唯一能想到的就是在C++中使用布尔类型和整数之间的隐式转换。
#include <iostream>
using namespace std;
int main (){
int a, b, c, hasil;
cout << "Masukkan Bilangan 1 : ";
cin >> a;
cout << "Masukkan Bilangan 2 : ";
cin >> b;
cout << "Masukkan Operator ['(0 = +)' , '(1 = -)' , '(2 = *)', '(3 = /)' ] : ";
cin >> c;
// if your input is a=10, b=5, c=0 :
// a + b == 15
// !c == 1
// 15 * 1 == 15
// a - b == 5
// !(c - 1) == !(0 - 1) == 0
// 5 * 0 == 0
// and so on...
hasil = ((a + b) * !c) + ((a - b) * !(c - 1)) + ((a * b) * !(c - 2)) + ((a / b) * !(c - 3));
cout << "Hasilnya = " << hasil;
}
#包括
使用名称空间std;
int main(){
INTA、b、c、hasil;
cout>a;
cout>b;
cout>c;
//如果您的输入为a=10、b=5、c=0:
//a+b==15
//!c==1
// 15 * 1 == 15
//a-b==5
//!(c-1)==!(0-1)==0
// 5 * 0 == 0
//等等。。。
哈西尔=((a+b)*!c)+((a-b)*!(c-1))+((a*b)*!(c-2))+((a/b)*!(c-3));
在这个任务中,我唯一能想到的就是在C++中使用布尔类型和整数之间的隐式转换。
#include <iostream>
using namespace std;
int main (){
int a, b, c, hasil;
cout << "Masukkan Bilangan 1 : ";
cin >> a;
cout << "Masukkan Bilangan 2 : ";
cin >> b;
cout << "Masukkan Operator ['(0 = +)' , '(1 = -)' , '(2 = *)', '(3 = /)' ] : ";
cin >> c;
// if your input is a=10, b=5, c=0 :
// a + b == 15
// !c == 1
// 15 * 1 == 15
// a - b == 5
// !(c - 1) == !(0 - 1) == 0
// 5 * 0 == 0
// and so on...
hasil = ((a + b) * !c) + ((a - b) * !(c - 1)) + ((a * b) * !(c - 2)) + ((a / b) * !(c - 3));
cout << "Hasilnya = " << hasil;
}
#包括
使用名称空间std;
int main(){
INTA、b、c、hasil;
cout>a;
cout>b;
cout>c;
//如果您的输入为a=10、b=5、c=0:
//a+b==15
//!c==1
// 15 * 1 == 15
//a-b==5
//!(c-1)==!(0-1)==0
// 5 * 0 == 0
//等等。。。
哈西尔=((a+b)*!c)+((a-b)*!(c-1))+((a*b)*!(c-2))+((a/b)*!(c-3));
cout您基本上必须同时计算所有四个变量(警告,“1+0”将崩溃,因为在计算过程中它将被零除,即使选择了“+”运算),并过滤掉不需要的变量
要过滤掉不需要的值,您需要将c
转换为四个值集之一:
c==1: [1, 0, 0, 0]
c==2: [0, 1, 0, 0]
c==3: [0, 0, 1, 0]
c==4: [0, 0, 0, 1]
让我们把这些内部的四个值叫做ci,i=1..4
c1=((c-2)*(c-3)*(c-4))/-6;
c2=((c-1)*(c-3)*(c-4))/2;
c3=((c-1)*(c-2)*(c-4))/-2;
c4=((c-1)*(c-2)*(c-3))/6
然后:
结果=c1*(a+b)+c2*(a-b)+c3*(a*b)+c4*(a/b)
这是“纯数学”的解决方案,不使用C++ <代码>布尔O/COD>隐式转换为0/1,这在生产代码中会更好,但我认为这是一个“欺骗”在这个练习中,这就是为什么我用多项式来计算0/1个系数而没有<代码>布尔O/CART>这样复杂的转换。
更新很少,从“纯数学”转向更实用的东西
- 不需要的零除法解决方案:您可以计算(a/(b |(c4-1))(c4为0或1)。这将使除数等于
-1
,每当c4为零时,它将中和“a=1,b=0,c=1”(即“1+0”)等输入的“零除法”,并且只有在操作时才可能发生零除法选择“除法”且b==0
- 如果您将ci值从[0,1]翻转到[0,-1](只需在最终规格化除法处更改固定常数的符号),并且所有内容都是
int
,那么您可以用按位和替换最终公式中的ci乘法,如:result=(c1&(a+b))+(c2&(a-b))+(c3&(a*b))+(c4&(a/b))-这在现代CPU上会稍微快一点(在历史CPU上也会快很多)。{然后当然也必须翻转零除修复=>b |(-1-c4)}
注:呃,我的除法修正目标是-1,考虑在大多数输入的无符号数学中使整个除法变为0,然后我发现这是有符号的int
,总的来说没有什么意义,但我保留了-1
作为目标值,而任何非零的值都可以工作,即使是简单的1
和
仅在负整数由2的补码逻辑实现的平台上工作,因此-1