2020.9.20 字节笔试 四则运算(+ - * ^)

本文介绍了一个简易计算器的设计与实现,该计算器支持加法、减法、乘法及幂运算,并通过快速幂取模算法解决了大数运算的问题。

题目描述

张三需要找个工具人来帮忙计算数学题,这样的工具人太难找了,希望你可以为张三编写一个简单的计算器,因为张三还是小学生,所以只需要非常少的功能
加法
减法
乘法
幂(就是求几次方
1+2=3
1-2=-1
1*2=2
1^2=1
你需要编写一个支持这些运算的程序,并计算给的输入的结果。

输入描述
第一行一个整数n,表示有n组输入
接下来n行,每一行有整数a b和字符op,表示操作数1,操作数2,运算类型
即a op b = ?
约定所有输入的整数范围(-1e9 <= num <=1e9) 1e9表示10的9次方
所有输入都合法

输出描述
输出n行,每一行一个结果
注意:结果可能很大,所有运算对1e9+7取模

输入
5
1 2 +
3 4 -
1000000000 1000000000 *
2 3 ^
2 1000000000 ^

输出
3
-1
49
8
140625001

思路:快速幂取模
#include<iostream>
using namespace std;

typedef long long int LL;
const int MOD = 1e9 + 7;

LL quick_mod(LL a, LL b) {
	LL res = 1;
	while (b) {
		if (b & 0x1) res = (res*a) % MOD;
		a = (a*a) % MOD;
		b >>= 1;
	}
	return res;

}
int main() {
	int n, a, b; char ch;
	cin >> n;
	while (n--) {
		cin >> a >> b >> ch;
		if (ch == '+') cout << (a + b) % MOD << endl;
		else if (ch == '-') cout << (a - b) % MOD << endl;
		else if (ch == '*') cout << (a * 1LL * b) % MOD << endl;
		else cout << quick_mod(a, b) << endl;
	}

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值