码迷,mamicode.com
首页 > 其他好文 > 详细

FZU-Problem 2294 Uint47 calculator

时间:2018-08-02 20:52:06      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:target   溢出   ==   map   iostream   col   names   ring   nbsp   

题目链接: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 }

 

FZU-Problem 2294 Uint47 calculator

标签:target   溢出   ==   map   iostream   col   names   ring   nbsp   

原文地址:https://www.cnblogs.com/lino/p/9409147.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!