题目链接:http://acm.fzu.edu.cn/problem.php?pid=2294
题意:按照所给负号进行赋值、加、减乘、除和取余的操作。
解题思路:用map来存储字符串与值之间的对应关系。
ll 只能存64位,对于所给的六种运算,只有乘法有可能溢出。故对乘法采用快速乘取模的方法。将乘法变成加法,这样就不会溢出了。
AC代码:
#include <iostream>
#include <map>
#include <algorithm>
#include <string>
using namespace std;
typedef unsigned long long ull;
ull mod = 1LL << ;//2的47次方
map<string,ull>m;
int main()
{
ull d ;
string a,b,s;
while(cin>>s)
{
if(s=="def")
{
cin>>a>>d;
m[a]=(d+mod)%mod;
}
else if(s=="add")
{
cin>>a>>b;
m[a]=(m[a]+m[b])%mod;
}
else if(s=="sub")
{
cin>>a>>b;
m[a]=(m[a]-m[b])%mod;
}
else if(s=="mul")
{
cin>>a>>b;
m[a]=(m[a]*m[b])%mod;
}
else if(s=="div")
{
cin>>a>>b;
m[a]=m[a]/m[b];
}
else
{
cin>>a>>b;
m[a]=m[a]%m[b];
}
cout<<a<<" = "<<m[a]<<endl;
}
}