nyoj 841-最高位数字

来源:互联网 发布:leetcode中文版 java 编辑:程序博客网 时间:2024/06/09 19:56

http://acm.nyist.net/JudgeOnline/problem.php?pid=841

最高位数字

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描述
求N^N的个位数字大家应该都会了,可是,N^N的最高位数字你会求吗?
输入
多组测试数据。
每组数据输入一个正整数N(N≤1,000,000,000)。
输出
对于每组数据,输出N^N的最高位数字。
样例输入
34
样例输出
22

数学题目:

N^N = 10^(N*log(N))中,
由于 N <1000000000,
N*log(N)取值在[0,9000000000],没有超出double数据的范围,没有益处。
设N*log(N)的整数部分为intpart,分数部分为fractpart,
则N^N = 10^(intpart + fractpart) = 10^intpart * 10^fractpart.
其中10^intpart肯定为10的倍数,不影响结果,可忽略。
所以:
10^fractpart的最高位即为结果(因为0<=fractpart<1,所以1<=10^fractpart<10,所以10^fractpart的整数部分就是答案)

#include<iostream>#include<cmath>using namespace std;double solve(double n) {  double inpart, fractpart, t;   fractpart = modf(n * log10(n), &inpart); //double modf (double, double*);                                            //将参数的整数部分通过指针回传, 返回小数部分  t = pow(10, fractpart);  modf(t, &inpart);  //inpart是得到整数部分   return inpart;} int main() {  int n;  while (cin >> n)     cout << solve(n) << endl;}
double modf (double, double*); 返回值是小数部分,里面的值是整数部分

1 0