编程论坛
注册
登录
编程论坛
→
C语言论坛
64位有符号整数问题
青蝶
发布于 2018-12-14 10:55, 2079 次点击
想问一下为什么这道题题目里说输入不超过64位有符号整数的表示范围,但是用unsigned long long int 处理不行,要手动模拟?
http://acm.xidian.
4 回复
#2
rjsp
2018-12-14 12:32
你的代码呢?
你说不行,难道不贴出你不行的代码?
程序代码:
#include
<stdio.h>
int
main(
void
)
{
for
(
unsigned
long
long
n; scanf(
"
%llu
"
,&n)==
1
; )
{
if
( n%
10
>=
5
)
n +=
10
;
printf(
"
%llu.%02llu\n
"
, n/
1000
, n%
1000
/
10
);
}
}
#3
青蝶
2018-12-14 15:34
回复 2楼 rjsp
谢谢大佬,能不能帮我看一下为什么我写的这个不过?提交显示答案错误
程序代码:
#include
<iostream>
#include
<functional>
#include
<iomanip>
using
namespace
std;
unsigned
long
long
int
a;
int
main(
void
){
double
b;
while
(
cin
>>a){
b=(
double
)a;
b/=
1000
;
cout
<<fixed<<setprecision(
2
)<<b<<endl;
}
return
0
;
}
#4
rjsp
2018-12-14 16:17
b = (double)a; 精度就没了吧,double是53bits的有效数,而"64位有符号整数"是63bits的有效数。
b/=1000; 会丧失精度
cout<<fixed<<setprecision(2) 也未必是“四舍五入”,好像只有VC是四舍五入,其它正常的编译器都用的都是正常的
四舍六入五成双
#5
青蝶
2018-12-15 00:08
回复 4楼 rjsp
明白了,谢谢大佬
[此贴子已经被作者于2018-12-15 00:10编辑过]
1