zoukankan      html  css  js  c++  java
  • pascal,c,c++使用大于2^32整型的注意要点

    如果在你的电脑出现以下这种现象,则说明这篇文章适合你,否则不必理会。

    适用于取余

    比如求n!除以1000000007(被除数较大)的余数。

    pascal:

    pascal输出不需要说明格式,而若式子运算过程中的值都在2^64范围内,在整型范围内,则结果输出无错误,不需要高精度。

    1 begin
    2     writeln(100000*100000);
    3     writeln(100000*10000 mod 100);
    4 end.

    c:

    1.若式子运算过程中的值曾经在2^64范围内,大于2^32的范围,即使结果在2^32内,即使用long long,__int_64的数据保存,都要加上(long long) 或 (__int_64)。

    Wrong:long long x;  x=1000000*1000000+2;

    Yes:long long x;  x=(long long)1000000*1000000+2;

    Wrong:printf("%ld ",1000000*1000000/1000000);

    Yes:printf("%ld ",(long long)1000000*1000000/1000000);

    2.若运算结果在2^64范围内,大于2^32的范围,则需要用到long long: %lld,__int_64: %i64d。

    Wrong:printf("%lld ",(long long)1000000*1000000+2);

    Yes:printf("%ld ",(long long)1000000*1000000+2);

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 int main()
     5 {
     6     long long x;
     7     x=(long long)1000000*1000000+2;
     8     printf("%lld
    ",x);
     9     printf("%lld
    ",(long long)1000000*1000000+2);
    10 
    11     printf("--------
    ");
    12 
    13     x=1000000*1000000+2;
    14     printf("%lld
    ",x);
    15     printf("%lld
    ",1000000*1000000+2);
    16     printf("%ld
    ",(long long)1000000*1000000+2);
    17 
    18     printf("--------
    ");
    19 
    20     printf("%ld
    ",1000000*1000000/1000000);
    21     printf("%ld
    ",(long)1000000*1000000/1000000);
    22     printf("%ld
    ",(long long)1000000*1000000/1000000);
    23     printf("%lld
    ",1000000*1000000/1000000);
    24     printf("%lld
    ",(long long)1000000*1000000/1000000);
    25 
    26     return 0;
    27 }

    c++:

    1.c++和pascal一样,输出不需要说明格式;而c输出需要说明格式,所以c++不用像c一样判断什么时候用%ld,或者%lld,%i64d。

    2.若式子运算过程中的值曾经在2^64范围内,大于2^32的范围,即使结果在2^32内,即使用long long,__int_64的数据保存,都要加上(long long) 或 (__int_64)。这一点和c一样。

     1 #include <iostream>
     2 using namespace std;
     3 
     4 int main()
     5 {
     6     long long x;
     7     x=(long long)1000000*1000000+2;
     8     cout<<x<<endl;
     9     cout<<(long long)1000000*1000000+2<<endl;
    10 
    11     cout<<"--------"<<endl;
    12 
    13     x=1000000*1000000+2;
    14     cout<<x<<endl;
    15     cout<<1000000*1000000+2<<endl;
    16 
    17     cout<<"--------"<<endl;
    18     cout<<1000000*1000000/1000000<<endl;
    19     cout<<(long)1000000*1000000/1000000<<endl;
    20     cout<<(long long)1000000*1000000/1000000<<endl;
    21 
    22     return 0;
    23 }

  • 相关阅读:
    端口转发工具ngr0k
    深入理解JavaScript系列(2):揭秘命名函数表达式(转)
    SQL Server DATEDIFF() 函数
    em(倍)与px的区别
    左右页面布局
    深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点(转)
    《JavaScript高级程序设计》(第二版)
    autocomplete 之 ASP.NET
    JQuery 优缺点略谈
    几个常见CSS错误和解决办法
  • 原文地址:https://www.cnblogs.com/cmyg/p/6648817.html
Copyright © 2011-2022 走看看