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;
}
相关文章
|
17天前
|
Java
hdu-1312-Red and Black
hdu-1312-Red and Black
15 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)。
23 0
|
10月前
UVa837 - Light and Transparencies(排序)
UVa837 - Light and Transparencies(排序)
41 0
|
12月前
|
机器学习/深度学习 C++
【PAT甲级 - C++题解】1069 The Black Hole of Numbers
【PAT甲级 - C++题解】1069 The Black Hole of Numbers
64 0
|
存储 算法 C#
hdu 1312 Red and Black
一个人从@点出发,求他所能到达的'.'的数目,'#'不可走,@本身算1个点。 思路:搜索入门题。
128 0
HDOJ 1312 (POJ 1979) Red and Black
HDOJ 1312 (POJ 1979) Red and Black
95 0
|
人工智能 网络协议
HDOJ 1312 (POJ 1979) Red and Black
Problem Description There is a rectangular room, covered with square tiles. Each tile is colored either red or black.
1091 0

热门文章

最新文章