我有一个以变量计数存储的数字。我必须扫描数字N(最大尺寸10 ^ 18),然后将变量计数乘以10 ^(N-2),然后计算其模数(10 ^ 9 + 7)。我试着这样做
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
int main()
{
int T,w;
char ch='0';
unsigned long long int M=1000000007;
unsigned long long int i,N,count;
scanf("%d",&T);
while(T--)
{
scanf("%llu %d",&N,&w);
if(w==0 || w==-1)
count=9;
else if(w==1 || w==-2)
count=8;
else if(w==2 || w==-3)
count=7;
else if(w==3 || w==-4)
count=6;
else if(w==4 || w==-5)
count=5;
else if(w==5 || w==-6)
count=4;
else if(w==6 || w==-7)
count=3;
else if(w==7 || w==-8)
count=2;
else if(w==8 || w==-9)
count=1;
else
count=0;
count = count*pow(10,N-2)%M;
printf("%llu\n",count);
}
}
但是,1)因为pow返回double并且%希望它的两个操作数都是int,它会产生编译错误2)Typecasting无济于事,因为没有数据类型可以存储大小的值 (10)^(10 ^ 18)
我如何解决这个问题?
答案 0 :(得分:0)
只需创建自己的整数幂函数,或者在这种情况下更简单地使用整数exp10函数:
unsigned long long exp10i( unsigned n )
{
unsigned long long e = 1 ;
for( unsigned p = 0; i < n; p++ )
{
e *= 10u ;
}
return e ;
}
然后:
count = (count * exp10i( N-2 )) % M;