UVA465-溢出
来源:互联网 发布:网络电话机终端 编辑:程序博客网 时间:2024/04/30 23:25
#include <iostream>#include <cstdlib>using namespace std;int main (){ char a[3000], b[3000]; char ch; long long int max = 2147483647; while(cin>>a) { cin.get(); cin>>ch; cin>>b; cin.get(); cout<<a<<" "<<ch<<" "<<b<<endl; double c = atof(a); double d = atof(b); double result; if(c>max)cout<<"first number too big"<<endl; if(d>max)cout<<"second number too big"<<endl; if(ch == '+')result = c + d; else result = c * d; if(result>max)cout<<"result too big"<<endl; } return 0;}
方法一真狗血啊,我只用了一个#clude<cstdlib>里的stof()函数就轻松解决了,不过收获不大,还需要寻找另一种方法!!!
记住:这个题的最大值max只能设为2147483647不能设为65535.比较赞同的方法,缺点耗时,优点,简单易懂
#include <stdio.h>#include <string.h>const int Int[11]={2,1,4,7,4,8,3,6,4,7};char *s1="first number too big",*s2="second number too big",*s3="result too big";char exp[10010]={'\0'},opr;int a[510]={0},b[510]={0},la,lb;bool Bignum(int *a,int la){ if(la>10) return true; else if(la<10) return false; for(int i=0;i<10;i++) if(a[i]>Int[i]) return true; else if(a[i]<Int[i]) return false; return false;}int Delzero(int *a,int la){ while(!a[la-1]&&la-1) la--; return la;}void Change(int *a,int la){ int t; for(int i=0;i<la-i-i;i++) { t=a[i]; a[i]=a[la-1-i]; a[la-1-i]=t; }}void Plus(int *a,int *b,int la){ for(int i=0;i<la;i++) { a[i]+=b[i]; if(a[i]>=10) { a[i+1]++; a[i]%=10; } } if(a[la]) la++; la=Delzero(a,la); Change(a,la); if(Bignum(a,la)) printf("%s\n",s3);}void Mult(int *a,int *b,int la,int lb){ int c[510]={0}; for(int i=0;i<la;i++) for(int j=0;j<lb;j++) { c[i+j]+=a[i]*b[j]; if(c[i+j]>=10) { c[i+j+1]+=c[i+j]/10; c[i+j]%=10; } } la+=lb; la=Delzero(c,la); Change(c,la); if(Bignum(c,la)) printf("%s\n",s3);}int main(){ bool t; while(gets(exp)!=NULL) { t=true;la=lb=0; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); puts(exp); for(int i=0;i<strlen(exp);i++) if(exp[i]==' '||exp[i]=='*'||exp[i]=='+') { if(exp[i]=='*'||exp[i]=='+') opr=exp[i]; t=false; } else { if(t) a[la++]=exp[i]-'0'; else b[lb++]=exp[i]-'0'; } Change(a,la); la=Delzero(a,la); Change(a,la); Change(b,lb); lb=Delzero(b,lb); Change(b,lb); if(Bignum(a,la)) printf("%s\n",s1); if(Bignum(b,lb)) printf("%s\n",s2); Change(a,la); Change(b,lb); if(opr=='+') Plus(a,b,la>lb?la:lb); else Mult(a,b,la,lb); } return 0;}
- UVA465-溢出
- uva465
- UVA465
- UVA465
- uva465
- uva465--BigNumber
- uva465 - Overflow
- uva465 overflow
- UVa465 Overflow
- ACM->uva465
- uva465 - Overflow
- uva465 overflow
- uva465 - Overflow
- UVA465 - Overflow
- uva465(伪高精度)
- 高精度 UVA465 Overflow
- 溢出
- 溢出
- Essential C++学习笔记------第五章
- 没有“temp”的swap
- mysql 基础 -mysqld_safe 启动执行流程
- ES3和ES5中函数调用(function call) 的浏览器实现差异.
- POJ-2226-Muddy Fields
- UVA465-溢出
- WM_NCCALCSIZE
- 字符设备 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()
- LoadMenuIndirect
- synchronized java 详解2
- 阅读uboot源码的历程
- seam2.3+jboss7.1配置过程
- 程序员笔试题---群硕
- 黑马程序员——高新技术之 泛型