如何用C++实现针对整数的加减乘除(四则)运算函数?
时间: 2024-10-02 18:03:25 浏览: 21
在C++中,你可以创建四个模板函数来实现基本的四则运算,它们分别对应于加法、减法、乘法和除法。这里是一个简单的示例:
```cpp
template <typename T>
T add(T a, T b) {
return a + b;
}
template <typename T>
T subtract(T a, T b) {
return a - b;
}
template <typename T>
T multiply(T a, T b) {
return a * b;
}
template <typename T>
// 要注意除数为零的情况,这里仅提供基本处理,更严谨的做法需要添加异常处理
T divide(T a, T b) {
if (b != 0)
return a / b;
else
throw std::invalid_argument("Division by zero is not allowed.");
}
```
上述代码定义了四个通用的运算函数,`T`是一个模板参数,代表任意类型的整数。当你使用这些函数时,只需传入对应的整数值即可。
相关问题
用C++描述一段关于大整数的加减乘除运算
关于大整数的加减乘除运算,可以使用以下C语言代码进行描述:
```c
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define maxn 1000
struct bign{ //定义结构体存储大整数
int d[maxn], len;
bign() //结构体初始化函数
{memset(d,0,sizeof(d)); len=0;}
};
bign change(char str[]) //将字符串转为大整数
{
bign res;
res.len=strlen(str);
for(int i=0;i<res.len;i++) res.d[i]=str[res.len-1-i]-'0';
return res;
}
int compare(bign a, bign b) //比较两个大整数的大小
{
if(a.len>b.len) return 1;
else if(a.len<b.len) return -1;
else
{
for(int i=a.len-1;i>=0;i--)
if(a.d[i]>b.d[i]) return 1;
else if(a.d[i]<b.d[i]) return -1;
return 0;
}
}
bign add(bign a, bign b) //大整数加法
{
bign c;
int carry=0;
for(int i=0;i<a.len || i<b.len;i++)
{
int sum=a.d[i]+b.d[i]+carry;
c.d[c.len++]=sum%10;
carry=sum/10;
}
if(carry) c.d[c.len++]=carry;
return c;
}
bign sub(bign a,bign b) //大整数减法
{
bign c;
for(int i=0,carry=0;i<a.len;i++)
{
int tmp=a.d[i]-carry-b.d[i];
if(tmp>=0) carry=0;
else
{
carry=1;
tmp+=10;
}
c.d[c.len++]=tmp;
}
while(c.len>1 && c.d[c.len-1]==0) c.len--;
return c;
}
bign mul(bign a, int b) //大整数与小整数的乘法
{
bign c;
int carry=0;
for(int i=0;i<a.len;i++)
{
int tmp=a.d[i]*b+carry;
c.d[c.len++]=tmp%10;
carry=tmp/10;
}
while(carry) //必须要判最高的一位有没有进位,否则漏了的话就少了一位
{
c.d[c.len++]=carry%10;
carry/=10;
}
return c;
}
bign mul(bign a, bign b) //大整数乘法
{
bign c;
c.len=a.len+b.len;
for(int i=0;i<a.len;i++)
for(int j=0;j<b.len;j++)
c.d[i+j]+=a.d[i]*b.d[j];
for(int i=0;i<c.len;i++)
{
c.d[i+1]+=c.d[i]/10; //进位处理
c.d[i]%=10;
}
while(c.len>1 && c.d[c.len-1]==0) c.len--;
return c;
}
bign divide(bign a, int b, int &r) //大整数除以小整数
{
bign c;
c.len=a.len;
for(int i=a.len-1;i>=0;i--)
{
r=r*10+a.d[i];
if(r<b) c.d[i]=0;
else
{
c.d[i]=r/b;
r=r%b;
}
}
while(c.len>1 && c.d[c.len-1]==0) c.len--;
return c;
}
char* BignToString(bign a) //大整数转为字符串
{
char* res=new char[maxn];
for(int i=0;i<a.len;i++)
res[i]=a.d[a.len-1-i]+'0';
res[a.len]='\0';
return res;
}
int main()
{
char str1[maxn], str2[maxn];
int a,b;
scanf("%s%s%d",str1,str2,&b);
bign A=change(str1),B=change(str2),C,D,E;
C=add(A,B);
D=sub(A,B);
E=mul(A,b);
int r=0;
C=divide(A,b,r);
printf("%s\n%s\n%s\n%s\n",BignToString(C),BignToString(D),BignToString(E),BignToString(C));
return 0;
}
```
在程序中,使用结构体bign存储大整数,通过定义加法、减法、乘法、除法等运算函数,实现了大整数的加减乘除运算。同时,还可以将大整数转为字符串输出,方便进行结果的输出和格式化。
用c++模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算
在C++中,我们可以创建一个简单的计算器类Calculator,它包含私有变量来存储操作数和一个运算栈。这个类将提供四个成员函数,分别对应加、减、乘、除操作。由于运算符优先级相等,我们将采用逆波兰表示法(RPN,也叫后缀表达式),这样可以避免括号的复杂处理。
```cpp
#include <iostream>
#include <stack>
using namespace std;
class Calculator {
private:
int num1, num2; // 存储两个操作数
stack<int> opStack; // 运算栈
public:
void push(int n) { // 入栈操作数
opStack.push(n);
}
void performOp(char op) { // 根据运算符执行相应操作
switch (op) {
case '+':
num2 = opStack.top(); // 取出栈顶元素
opStack.pop();
num1 += num2;
opStack.push(num1); // 结果入栈
break;
case '-':
case '*':
case '/': // 类似地处理减、乘、除
num2 = opStack.top();
opStack.pop();
// ...按照相应的运算法则计算...
break;
}
}
int getResult() { // 获取最终结果
return opStack.top();
}
};
int main() {
Calculator calc;
// 输入操作数和运算符,比如:calc.push(5), calc.push(3), calc.performOp('+');
// 使用完后调用getResult()获取结果
return 0;
}
```
在`main`函数中,你可以通过构建`Calculator`实例并调用其方法来模拟输入运算序列。例如,先推入两个数字,然后选择一个运算符执行,并不断循环直到所有的运算都被完成。最后,`getResult()`函数会返回计算的结果。