回复 3楼 rjsp
#include<iostream>#include<math.h>
using namespace std;
int main()
{
long int n, s, t;
cin >> n;
s = pow( 2 , (long double) n ) * ( 1 + pow( 2, (long double) n )) / 2 ;
t = ( pow( (long double) 10, (long double) 9 ) + 7 );
s = (unsigned)s % (unsigned)t;
cout << s << endl;
return 0;
}
这是我第一次写的,发现超过范围,我就想着在1+2+3+....一旦超过范围就取模,但是循环了太多超时了
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
int num=0;
double n;
const double ou=9;
cin >> n;
for(int i=0; num<(pow(2,n)+1)*pow(2,n)/2 ; i++)
{
if(num>pow(2,ou)+7)
num=num%(num<pow(2,ou)+7);
num +=i;
}
cout << num << endl;
return 0;
}
现在问题是a*b%c变成了(a%c*b%c)但是a超过了范围。 就像我第一次写的 2^n,n输入100,n>63 longlong的取值就超过了 ,然后被取了近似,即使取模得到的也不是准确的数据而是被取近似后的数据。
@ ——!