C语言中fmod函数的功能是x/y的求余运算,适用于double ,float,long double,如果y=0的话,那么返回
值得一提的是%,‘%’同样是取余,但是%
适用于整数取余,%是整数的取余符号,而fmod是函数,它的参数必定是浮点型(double,float,long double),头文件是<math.h>可以看一下这个代码
#include<stdio.h>
#include<math.h>
int main()
{
double a=2.8,b=0.2,c=0.0;
c=fmod(a,b);
printf("a=%.16lf,b=%.16lf,c=%.16lf\n",a,b,c);
}
结果是a=2.7999999999999998,b=0.2000000000000000,c=0.1999999999999997
C语言中log10(),一般可以用于nk,因为log10(nk)=k*log10(n)
可以从下面的题感悟
题意:求n^k的前三位和后三位
样例:
Sample Input
5
123456 1
123456 2
2 31
2 32
29 8751919
Sample Output
Case 1: 123 456
Case 2: 152 936
Case 3: 214 648
Case 4: 429 296
Case 5: 665 669
#include<stdio.h>
#include<math.h>
int main()
{
int N;
scanf("%d",&N);
int qw=0;
while(N--)
{
qw++;
long long m,n;
scanf("%lld %lld",&m,&n);
printf("Case %d: ",qw);
long long q=1,w;
long long m1=m,n1=n;
///
while(n1)
{
if(n1%2==1)
q=q*m1%1000;
m1=m1*m1%1000;
n1=n1/2;
}
// m1=m,n1=n;
///!!!求前三位
double e=n*log10(m);
w=pow(10,e-(int)e)*100;
///!!!
printf("%lld %03lld\n",w,q);
}
}
从这段代码想到
///
long long q=1;
while(n1)
{
if(n1%2==1)
q=q*m1%1000;
m1=m1*m1%1000;
n1=n1/2;
}
快速幂模板
int ans = 1;
a = a % c;
while(b>0)
{
if(b % 2 == 1)
ans = (ans * a) % c;
b = b/2;
a = (a * a) % c;
}