A-Uint47 calculator(快速乘)
题意:
定义一堆变量然后进行加减乘除运算
思路:
这题难的地方在乘法,会超出long long的范围,所以要用到快速乘(原理跟快速幂类似)
#include<iostream> #include<algorithm> #include<vector> #include<map> #include<string> #define Endl endl using namespace std; typedef long long ll; const ll mod=1ll<<47; map<string,ll> m; string s1,s2,s3; ll qm(ll a,ll b) { ll ans=0; while(b){ if(b%2) ans=(ans+a)%mod; a=(a+a)%mod; b/=2; } return ans; } int main() { ll num; while(cin>>s1>>s2){ if(s1=="def") cin>>num; else{ cin>>s3; if(s1=="add") num=(m[s2]+m[s3])%mod; if(s1=="sub") num=(m[s2]-m[s3]+mod)%mod; if(s1=="mul") num=qm(m[s2],m[s3]); if(s1=="div") num=m[s2]/m[s3]; if(s1=="mod") num=m[s2]%m[s3]; } if(num<0) num+=mod; m[s2]=num; cout<<s2<<" = "<<num<<endl; } return 0; }