我创建了一个模块化计算器,用于执行一系列数学执行,最后采用以前所有内容的mod。但是,我继续得到错误的结果。
#include <iostream>
using namespace std;
int main(){
int num1, num2, ans = 0;
char oper = ' ';
cin >> num1>> oper >> num2;
//The first time
if (oper == '*')
ans =num1*num2;
else if (oper == '+')
ans = num1+num2;
//other times
do {
cin>> oper >> num2;
if (oper == '*')
ans =ans*num2;
else if (oper == '+')
ans = ans+num2;
} while (oper!='%');
if (oper == '%')
ans = (ans % num2);
cout<<ans;
}
输入:
4
* 8805
* 99
* 12
+ 6
+ 367
* 575
+ 66
+ 9
* 8
* 8
* 711
+ 130
* 5
+ 5
+ 1
+ 73
* 811
* 33
+ 56
+ 80
* 350
* 116
+ 179
* 383
* 12
+ 59
+ 5150
* 10
+ 5
+ 8783
* 48
* 84
* 7
+ 390
+ 7057
* 10
+ 8366
+ 8856
* 99
* 9
+ 3019
+ 228
* 334
+ 75
+ 6353
+ 7151
* 8
% 1408
输出:-1240
预期:808
有任何解释吗? (BigInt
或double
或unsigned int
代替int
似乎无法解决任何问题;我已尝试过所有这些内容。
答案 0 :(得分:2)
由于 int 溢出,你得错了答案。
让我们举个例子
让我们说下面的输入
class MyLibrary {
private $type2;
public function __construct($params)
{
echo $params['type'];
//I WANT TO DISPLAY TYPE2 BY HELLO FUNCTION
$this->type2 = 'asdasdasd';
}
public function hello()
{
return $this->type2;
}
}
你的程序会给出错误的答案,因为
首次输入后,ans = 4 * 432 = 1728
第二次输入后,ans = 1732 * 432 = 746496(大于 int 最高范围,它出现int溢出并给出错误答案)
出于这个原因,我们可以使用下面的模数算术公式,以便我们可以让 int 溢出。
为了您的信息, (26 + 3 * 2)%3 =(26%3 + 3%3 * 2%3)%3
试试这个
4
* 432
* 422
* 432
% 8