题目1037:Powerful Calculator
来源:互联网 发布:荧光字体软件下载 编辑:程序博客网 时间:2024/05/24 07:01
- 题目描述:
Today, facing the rapid development of business, SJTU recognizes that more powerful calculator should be studied, developed and appeared in future market shortly. SJTU now invites you attending such amazing research and development work.
In most business applications, the top three useful calculation operators are Addition (+), Subtraction (-) and Multiplication (×) between two given integers. Normally, you may think it is just a piece of cake. However, since some integers for calculation in business application may be very big, such as the GDP of the whole world, the calculator becomes harder to develop.
For example, if we have two integers 20 000 000 000 000 000 and 4 000 000 000 000 000, the exact results of addition, subtraction and multiplication are:
20000000000000000 + 4000000000000000 = 24 000 000 000 000 000
20000000000000000 - 4000000000000000 = 16 000 000 000 000 000
20000000000000000 × 4000000000000000 = 80 000 000 000 000 000 000 000 000 000 000
Note: SJTU prefers the exact format of the results rather than the float format or scientific remark format. For instance, we need "24000000000000000" rather than 2.4×10^16.
As a programmer in SJTU, your current task is to develop a program to obtain the exact results of the addition (a + b), subtraction (a - b) and multiplication (a × b) between two given integers a and b.
- 输入:
Each case consists of two separate lines where the first line gives the integer a and the second gives b (|a| <10^400 and |b| < 10^400).
- 输出:
For each case, output three separate lines showing the exact results of addition (a + b), subtraction (a - b) and multiplication (a × b) of that case, one result per lines.
- 样例输入:
200000000000000004000000000000000
- 样例输出:
2400000000000000016000000000000000
80000000000000000000000000000000
C++代码:
#include<iostream>#include<string>using namespace std;int a[500];int b[500];int sum[1000];int sub[1000];int mul[1000];bool g(int a1[500],int b1[500]){ for(int i=499;i>=0;i--){ if(a1[i]>b1[i]) return true; if(a1[i]<b1[i]) return false; } return true;}void add(){ int c=0; for(int i=0;i<500;i++){ sum[i]=(a[i]+b[i]+c)%10; c=(a[i]+b[i]+c)/10; }}void dec(){ int c=0; if(g(a,b)){ for(int i=0;i<500;i++){ if(a[i]-c>=b[i]){ sub[i]=a[i]-c-b[i]; c=0; }else{ sub[i]=a[i]-c+10-b[i]; c=1; } } }else{ for(int i=0;i<500;i++){ if(b[i]-c>=a[i]){ sub[i]=b[i]-c-a[i]; c=0; }else{ sub[i]=b[i]-c+10-a[i]; c=1; } } }}void multi(){ int c=0; for(int i=0;i<500;i++) for(int j=0;j<500;j++){ int tmp = mul[i+j]; mul[i+j]=(a[i]*b[j]+c+mul[i+j])%10; c=(a[i]*b[j]+c+tmp)/10; }}void showsum(string m1,string m2){ int ind=499; if(m1=="+"&&m2=="+"||m1=="-"&&m2=="-"){ for(;ind>=0;ind--){ if(sum[ind]!=0) break; } if(ind<0){ cout<<0<<endl; }else{ if(m1=="-"&&m2=="-") cout<<"-"; for(int i=ind;i>=0;i--){ cout<<sum[i]; } cout<<endl; } }else{ for(;ind>=0;ind--){ if(sub[ind]!=0) break; } if(ind<0){ cout<<0<<endl; }else{ if(m1=="+"&&m2=="-"&&!g(a,b)||m1=="-"&&m2=="+"&&g(a,b)){ cout<<"-"; } for(int i=ind;i>=0;i--){ cout<<sub[i]; } cout<<endl; } }}void showdec(string m1,string m2){ int ind=499; if(m1=="+"&&m2=="+"||m1=="-"&&m2=="-"){ for(;ind>=0;ind--){ if(sub[ind]!=0) break; } if(ind<0){ cout<<0<<endl; }else{ if(m1=="+"&&m2=="+"&&!g(a,b)||m1=="-"&&m2=="-"&&g(a,b)){ cout<<"-"; } for(int i=ind;i>=0;i--){ cout<<sub[i]; } cout<<endl; } }else{ for(;ind>=0;ind--){ if(sum[ind]!=0) break; } if(ind<0){ cout<<0<<endl; }else{ if(m1=="-"&&m2=="+") cout<<"-"; for(int i=ind;i>=0;i--){ cout<<sum[i]; } cout<<endl; } }}void showmul(string m1,string m2){ int ind=999; for(;ind>=0;ind--){ if(mul[ind]!=0) break; } if(ind<0){ cout<<0<<endl; }else{ if(m1=="+"&&m2=="-"||m1=="-"&&m2=="+"){ cout<<"-"; } for(int i=ind;i>=0;i--){ cout<<mul[i]; } cout<<endl; }}int main(){ string aa; string bb; while(cin>>aa>>bb){ string m1,m2; int j=0; for(int i=aa.length()-1;i>0;i--){ a[j++]=aa.at(i)-'0'; } if(aa.at(0)=='-'){ m1="-"; } else{ m1="+"; a[j]=aa.at(0)-'0'; } j=0; for(int i=bb.length()-1;i>0;i--){ b[j++]=bb.at(i)-'0'; } if(bb.at(0)=='-'){ m2="-"; }else{ m2="+"; b[j]=bb.at(0)-'0'; } add(); dec(); multi(); showsum(m1,m2); showdec(m1,m2); showmul(m1,m2); for(int i=0;i<500;i++){ a[i]=0; b[i]=0; } for(int i=0;i<1000;i++){ sum[i]=0; sub[i]=0; mul[i]=0; } } return 0;}
- 题目1037:Powerful Calculator
- 题目1037:Powerful Calculator
- 题目1037:Powerful Calculator
- 题目1037:Powerful Calculator
- 题目1037:Powerful Calculator
- 题目1037:Powerful Calculator
- 九度 oj 题目1037:Powerful Calculator
- 【九度】题目1037:Powerful Calculator
- 九度 oj 题目1037:Powerful Calculator
- 九度[1037]-Powerful Calculator
- 九度OJ 1037 Powerful Calculator
- 九度oj-1037-Powerful Calculator
- OJ_1037 Powerful Calculator
- 1037.Powerful Calculator
- 九度oj 1037 Powerful Calculator 高精度算法
- 九度OJ 1037:Powerful Calculator(强大的计算器) (大整数运算)
- 上交考研复试07年Powerful Calculator
- Powerful Calculator(上海交大上机考试)
- 【RabbitMQ】——Hello World Demo
- redis 密码设置
- 进制-ASCLL-UNICODE问题
- 树
- 关于theano和keras的一些安装总结
- 题目1037:Powerful Calculator
- Unity3D添加视频文件
- STM32驱动LCD12864显示屏
- leetcode-wordbreak
- Qt之QMutex
- [笔记分享] [Hardware] PM8901 User Guide study report
- [编程题]奖学金
- 在使用ILSpy对c# dll进行反编译时遇到的问题及处理方式
- Python网站的漏洞如何检查?