躺好了!

导航

FZU-Problem 2294 Uint47 calculator

题目链接:http://acm.fzu.edu.cn/problem.php?pid=2294

题意:按照所给负号进行赋值、加、减乘、除和取余的操作。

解题思路:用map来存储字符串与值之间的对应关系。 

ll 只能存64位,对于所给的六种运算,只有乘法有可能溢出。故对乘法采用快速乘取模的方法。将乘法变成加法,这样就不会溢出了。

AC代码:

 1 #include <iostream>
 2 #include <map>
 3 #include <algorithm>
 4 #include <string>
 5 using namespace std; 
 6 typedef unsigned long long  ull;
 7 ull mod = 1LL << 47;//2的47次方 
 8 map<string,ull>m;
 9 int main()
10 {
11     ull d ;
12     string a,b,s;
13     while(cin>>s)
14     {
15         if(s=="def")
16         {
17             cin>>a>>d;
18             m[a]=(d+mod)%mod;
19         }
20         else if(s=="add")
21         {
22             cin>>a>>b;
23             m[a]=(m[a]+m[b])%mod;
24         }
25         else if(s=="sub")
26         {
27             cin>>a>>b;
28             m[a]=(m[a]-m[b])%mod;
29         }
30         else if(s=="mul")
31         {
32             cin>>a>>b;
33             m[a]=(m[a]*m[b])%mod;
34         }
35         else if(s=="div")
36         {
37             cin>>a>>b;
38             m[a]=m[a]/m[b];
39         }
40         else
41         {
42             cin>>a>>b;
43             m[a]=m[a]%m[b];
44         }
45         cout<<a<<" = "<<m[a]<<endl;
46     }
47 }

 

posted on 2018-08-02 18:40  躺好了!  阅读(296)  评论(0编辑  收藏  举报