如何用C++实现针对整数的加减乘除(四则)运算函数?
时间: 2024-10-02 17:03:25 浏览: 49
在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++中,你可以使用递归解析和栈数据结构来实现一个简单的算术表达式计算器。这里是一个基本的示例,它使用了`std::stack`来存储操作数和运算符,并实现了`eval`函数来进行计算:
```cpp
#include <iostream>
#include <stack>
#include <string>
#include <cstdlib>
using namespace std;
int precedence(char op) {
if (op == '+' || op == '-') return 1;
else if (op == '*' || op == '/') return 2;
return 0; // 非运算符字符,如数字
}
bool isOperator(char op) {
return op == '+' || op == '-' || op == '*' || op == '/';
}
int applyOperation(int a, int b, char op) {
switch (op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b; // 注意这里会抛出异常,如果b为0
}
return 0; // 未处理的运算符
}
int evaluate(string tokens) {
stack<int> values;
stack<char> ops;
for (char token : tokens) {
if (isdigit(token)) {
int num = 0;
while (isdigit(token)) {
num = num * 10 + token - '0';
++token;
}
values.push(num);
} else if (isOperator(token)) {
while (!ops.empty() && precedence(ops.top()) >= precedence(token)) {
int val2 = values.top(); values.pop();
int val1 = values.top(); values.pop();
char op2 = ops.top(); ops.pop();
values.push(applyOperation(val1, val2, op2));
}
ops.push(token);
}
}
while (!ops.empty()) {
int val2 = values.top(); values.pop();
int val1 = values.top(); values.pop();
char op = ops.top(); ops.pop();
values.push(applyOperation(val1, val2, op));
}
return values.top();
}
int main() {
string expression;
cout << "请输入一个整数表达式 (例如:4 + 5 * 6): ";
getline(cin, expression);
try {
int result = evaluate(expression);
cout << "结果是: " << result << endl;
} catch (const exception& e) {
cerr << "错误: " << e.what() << endl;
}
return 0;
}
```
这个程序能够处理类似 `4 + 5 * 6` 的简单表达式,但不包括括号、优先级等复杂情况。如果你想支持更复杂的表达式,你可能需要考虑使用词法分析和解析树。
用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存储大整数,通过定义加法、减法、乘法、除法等运算函数,实现了大整数的加减乘除运算。同时,还可以将大整数转为字符串输出,方便进行结果的输出和格式化。
阅读全文