标题:64位有符号整数问题
只看楼主
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
结帖率:92%
已结贴  问题点数:10 回复次数:4 
64位有符号整数问题
想问一下为什么这道题题目里说输入不超过64位有符号整数的表示范围,但是用unsigned long long int 处理不行,要手动模拟?
http://acm.xidian.
搜索更多相关主题的帖子: 有符号 整数 long http acm 
2018-12-14 10:55
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
你的代码呢?
你说不行,难道不贴出你不行的代码?

程序代码:
#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 );
    }
} 

2018-12-14 12:32
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
得分:0 
回复 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;
}
2018-12-14 15:34
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
b = (double)a; 精度就没了吧,double是53bits的有效数,而"64位有符号整数"是63bits的有效数。
b/=1000; 会丧失精度
cout<<fixed<<setprecision(2) 也未必是“四舍五入”,好像只有VC是四舍五入,其它正常的编译器都用的都是正常的四舍六入五成双
2018-12-14 16:17
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
得分:0 
回复 4楼 rjsp
明白了,谢谢大佬

[此贴子已经被作者于2018-12-15 00:10编辑过]

2018-12-15 00:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-492018-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030871 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved