你是不是要算这题还是别的...
6. 有一串数:1,2^2,3^3,4^4 ,………2004^2004,2005^2005,2006^2006。大明从左到右依次计算前面1003个数的末位数字之和,并且记为a,小光计算余下的1003个数的末位数字之和,并且记为b,则a-b=( )
(A)-3 (B)3 (C)-5 (D)5
6.C 第4项至第1003项的末位数字之和和第1004项至第2003项末位数字之和相同
a-b≡1+2^2+3^3-(2004^2004+2005^2005+2006^2006)≡1+4+7-(6+5+6)≡-5(mod10)
如果不是这题最好用C语言来做:
程序代码(C语言):
#include
#include
#include
#include
#define nMAX 100000
void solve(char *s)
{
int length;
int low,high,mid;
//对于2的2次方,特别处理
sscanf(s,\"%d\",&mid);
if( mid == 4 )
{
printf(\"%d\\n\",2);
return;
}
//以下为正常的计算
length = strlen( s );
low = 1;
high = nMAX;
while( low<=high )
{
int temp;
mid = (low+high) / 2;
temp = (int)(mid*log10(mid)) + 2;
if( temp == length )
{
//假定输入的都是合法的
printf(\"%d\\n\",mid);
return;
}
else if( temp > length )
high = mid-1;
else
low = mid+1;
}
printf(\"Impossible\\n\");
}
int main()
{
int bufsize;
char *buf;
bufsize = (int)(nMAX*log10(nMAX)) + 2;
buf = malloc( bufsize );
if( !buf )
exit( -1 );
while( fgets(buf, bufsize ,stdin) )
{
if( strcmp(buf, \"\") == 0 )
continue; //忽略空行
solve( buf );
}
}
2004^2004+2005^2005
=2004^2004+(2004+1)^(2004+1)
即使是算出了结果,
也只能用次方来表示而已。