注册 登录
编程论坛 C语言论坛

64位有符号整数问题

青蝶 发布于 2018-12-14 10:55, 2079 次点击
想问一下为什么这道题题目里说输入不超过64位有符号整数的表示范围,但是用unsigned long long int 处理不行,要手动模拟?
http://acm.xidian.
4 回复
#2
rjsp2018-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
rjsp2018-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