如果在你的电脑出现以下这种现象,则说明这篇文章适合你,否则不必理会。
适用于取余
比如求n!除以1000000007(被除数较大)的余数。
pascal:
pascal输出不需要说明格式,而若式子运算过程中的值都在2^64范围内,在整型范围内,则结果输出无错误,不需要高精度。
begin
writeln(*);
writeln(* mod );
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\n",1000000*1000000/1000000);
Yes:printf("%ld\n",(long long)1000000*1000000/1000000);
2.若运算结果在2^64范围内,大于2^32的范围,则需要用到long long: %lld,__int_64: %i64d。
Wrong:printf("%lld\n",(long long)1000000*1000000+2);
Yes:printf("%ld\n",(long long)1000000*1000000+2);
#include <stdio.h>
#include <stdlib.h> int main()
{
long long x;
x=(long long)*+;
printf("%lld\n",x);
printf("%lld\n",(long long)*+); printf("--------\n"); x=*+;
printf("%lld\n",x);
printf("%lld\n",*+);
printf("%ld\n",(long long)*+); printf("--------\n"); printf("%ld\n",*/);
printf("%ld\n",(long)*/);
printf("%ld\n",(long long)*/);
printf("%lld\n",*/);
printf("%lld\n",(long long)*/); return ;
}
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一样。
#include <iostream>
using namespace std; int main()
{
long long x;
x=(long long)*+;
cout<<x<<endl;
cout<<(long long)*+<<endl; cout<<"--------"<<endl; x=*+;
cout<<x<<endl;
cout<<*+<<endl; cout<<"--------"<<endl;
cout<<*/<<endl;
cout<<(long)*/<<endl;
cout<<(long long)*/<<endl; return ;
}