关闭

UVA 465 Overflow(浮点数的范围)

标签: c语言精度uva
429人阅读 评论(0) 收藏 举报
分类:
C - Overflow
Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu
Appoint description: 

Description

Download as PDF

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 (type integer if you are working Pascal, type int if 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


这道题目有点坑。。。。

套模板调了半天死活过不了。后来据说用double就可以。。

因为double的范围是10^308。

然后套用atof函数,就是将一个字符串转变成为double型浮点数。

郁闷的是,直接用double输入好像不行。

代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define INT 2147483647
int main()
{
	char s1[1000],c,s2[1000];
	int l1,l2,i,j,k;
	while(scanf("%s %c %s",s1,&c,s2)!=EOF)
	{
		double a,b;
		a=atof(s1);
		b=atof(s2);
		printf("%s %c %s\n",s1,c,s2);
		if(a>INT)printf("first number too big\n");
		if(b>INT)printf("second number too big\n");
	
			double cc;
			if(c=='+')cc=a+b;
			else if(c=='*')cc=a*b;
	//		printf("%.0f\n",c);
			if(cc>INT)printf("result too big\n");
		
	}
	return 0;
}


0
0
查看评论

uva 465 Overflow 还是高精度。。。

通过这道题,我学会了一个函数atof:把字符串转换为double类型,头文件:stdlib.h 还知道了double类型可以表示的范围:-1.79E+308 ~ +1.79E+308,float类型表示的范围:-3.40E+38 ~  +3.40E+38,原因是因为他们的存储方式不一样,...
  • sinat_22659021
  • sinat_22659021
  • 2015-05-27 19:31
  • 535

UVA-465-Overflow

double的正值取值范围为 4.94065645841246544E-324 到 1.79769313486231570E+308。高精度用double较方便,但是要注意double不精确的问题,所以本题采用了先用字符串,在转换的思路,至于一直想做的高精度思想,我的代码一直没有AC,本题用doub...
  • glqglqglq2
  • glqglqglq2
  • 2014-03-04 16:54
  • 460

UVA 465 - Overflow (浮点数的优势)

这道题体现了浮点数的优势。即使用64位整数(注意long long要I64d输出),溢出也会变成负数,判断起来比较困难。如果用double类型,即使字符串位数超过百位,同样用sscanf()函数进行处理,却不会变成负数。原因是浮点数可以用指数表示。例如,double的正值取值范围为 4.940656...
  • zcube
  • zcube
  • 2013-01-02 14:37
  • 1949

UVA 465 - Overflow(大数)

Overflow  Write a program that reads an expression consisting of two non-negative integer and an operator. Determine if either int...
  • coco430
  • coco430
  • 2013-07-24 11:47
  • 299

[UVa] 465 - Overflow

uva 465 - Overflow破水题,耗我精力,颓我精神。。。 按照《算法入门经典》的题目列表来做,前几题用到了高精度,所以这一题打算直接用高精度计算,几分钟水过去。没想到一水就是几个小时。最后终于在百度了好多博客之后,找到了自己的bug。 0000000000000001 + 000...
  • yoer77
  • yoer77
  • 2016-10-27 19:11
  • 97

UVA 465 Overflow

Overflow Write a program that reads an expression consisting of two non-negative integer and an operator. Determine if either integer or the re...
  • Houheshuai
  • Houheshuai
  • 2015-05-15 20:25
  • 210

UVa 465 Overflow

上次那个大数开方的高精度的题,
  • u014491224
  • u014491224
  • 2014-06-12 13:19
  • 555

UVa 465 Overflow

WA了好多次,错误1:对类似数字0001111没有处理前面的0; 错误2:以为大数乘0还是大数...(傻了) #include #include #include #include using namespace std; #ifndef BIGN_H_INCLUDED #defi...
  • cugfjp
  • cugfjp
  • 2013-04-16 20:28
  • 653

UVA 465 Overflow

Description Write a program that reads an expression consisting of two non-negative integer and an operator. Determine if either integer or the res...
  • shan_111
  • shan_111
  • 2015-08-07 10:48
  • 163

UVa 465 - Overflow 解题报告

高精度运算和比较,常规做法就是用高精度的方法进行加法和乘法,但是比较麻烦,如果用刘汝佳的bign类也是比较简单。在网上看到别人想到的用atof转化为浮点数直接比较,秒杀这道题。也是抓住这道题测试数据没有超过double的范围的漏洞吧。 以下是用atof的做法 #include #include...
  • u012411003
  • u012411003
  • 2014-01-30 10:18
  • 529
    个人资料
    • 访问:112691次
    • 积分:3378
    • 等级:
    • 排名:第11812名
    • 原创:235篇
    • 转载:2篇
    • 译文:0篇
    • 评论:9条
    最新评论