Overflow(UVA - 465)

简介: Overflow(UVA - 465)

最近新学了一个函数的用法,头文件是 stdlib.h 的 atof() 的函数,它可以把字符串的数字转化为double类型。

题目:

Write a program that reads an expression consisting of two non-negative integer and an operator.Determine if either integer or the result of the expression is too large to be represented as a “normal”signed integer (typeintegerif you are working Pascal, typeintif you are working in C).

Input

An unspecified number of lines. Each line will contain an integer, one of the two operators ‘+’ or ‘*’,and another integer.

Output

For each line of input, print the input followed by 0-3 lines containing as many of these three messages as are appropriate: ‘first number too big’, ‘second number too big’, ‘result too big’.Sample

Input

300 + 3
9999999999999999999999 + 11

Sample Output

300 + 3
9999999999999999999999 + 11
first number too big
result too big

解题思路:就是先判断两个数是否超出范围,然后再判断加和乘结果是否超出范围。

1、atof()函数写法:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
long long max=2147483647;
int main()
{
  char s[5000],s1[5000],t;
  double u,v;
  while(scanf("%s %c %s",s,&t,s1)!=EOF)
  {
    printf("%s %c %s\n",s,t,s1);
    u=atof(s);
    v=atof(s1);
    if(u>max)
      printf("first number too big\n");
    if(v>max)
      printf("second number too big\n");
    if(t=='+'&&u+v>max)
      printf("result too big\n");
    else if(t=='*'&&u*v>max)
      printf("result too big\n");   
  }
  return 0;
}

2、不用atof()函数的代码:

#include<stdio.h>
#include<string.h>
long long max=2147483647;
int main()
{
  char s[5000],s1[5000],t;
  int n,m,i,j,k;
  long long u,v;
  while(scanf("%s %c %s",s,&t,s1)!=EOF)
  {
    printf("%s %c %s\n",s,t,s1);
    n=strlen(s);
    m=strlen(s1);
    u=v=0;
    for(i=0;i<n;i++)
    {
      u=u*10+s[i]-'0';
      if(u>max)
      {
        printf("first number too big\n");
        break;
      }
    } 
    for(i=0;i<m;i++)
    {
      v=v*10+s1[i]-'0';
      if(v>max)
      {
        printf("second number too big\n");
        break;
      }
    }
    if(t=='+'&&u+v>max)
      printf("result too big\n");
    else if(t=='*'&&u*v>max)
      printf("result too big\n");   
  }
  return 0;
}
相关文章
|
8月前
|
算法
第K小数 uva 10041 - Vito's Family poj 2388 Who's in the Middle
了解快排的人对int (int l, int r) 这个函数很熟悉,因为这是在快排中用到的,它的作用是对数组的某一段选一个分界点,使得该点左边的数都不大于该点的数,右边的点不小于该点的数,也就是说我们通过一次调用这个函数确定一个数的位置,快排是将该点两边分别进行递归操作,时间复杂度为O(nlogn),而select只是对一边进行递归操作(有点像二分的递归形式),所以时间复杂度仅为O(n)。
24 0
|
存储 算法 C#
hdu 1312 Red and Black(BFS)
hdu 1312 Red and Black(BFS)
126 0
ZOJ1067 Color Me Less
复制代码#include <iostream> #include <cmath> #include <limits> using namespace std; const int MAXSIZE = 100; int pos[100];//记录对应的最小值所在位置 struct RGB {//颜.
1437 0
|
Java Go
HDU 2438 Turn the corner(三分查找)
托一个学弟的福,学了一下他的最简便三分写法,然后找了一道三分的题验证了下,AC了一题,写法确实方便,还是我太弱了,漫漫AC路!各路大神,以后你们有啥好的简便写法可以在博客下方留个言或私信我,谢谢了! Turn the corner Time Limit: 3000/1000 MS (Java/O...
953 0
【OJ】Red and black poj1979 // acmclub.com 6659
#include #include using namespace std; char tiles[21][21]; int x,y,w,h,ans; int dx[4]={-1,0,0,1},dy[4]={0,-1,1,0};//^ void dfs(int sx,i...
843 0