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;
}
相关文章
codeforces 340 A. The Wall
水水的一道题,只需要找xy的最小公倍数,然后找a b区间有多少个可以被xy的最小公倍数整除的数,就是答案。
60 0
uva127 "Accordian" Patience
uva127 "Accordian" Patience
42 0
LeetCode之Relative Ranks
LeetCode之Relative Ranks
111 0
|
机器学习/深度学习 人工智能
|
机器学习/深度学习
light oj 1132 Summing up Powers
点击打开light oj 1132 思路: 构造矩阵+矩阵快速幂 分析: 1 题目给定n和k要求(1K + 2K + 3K+ ... + NK) % 232 2 具体的思路见下图    3 对于求组合数,我们可以利用公式C(n , ...
802 0
uva 501 Black Box
点击打开链接uva 501 思路: vector模拟 分析: 1 题目的规模是n和m最大为30000,那么明显复杂度要为O(nlogn)级别才能过 2 由于枚举u数组需要n,所以剩下的是logn的时间,明显只有二分可以做到。
919 0