码迷,mamicode.com
首页 > 其他好文 > 详细

前人的代码(数学思想很重要)

时间:2014-05-11 14:02:20      阅读:350      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   java   c   

 

bubuko.com,布布扣

 

/*
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的整数部分就是答案)
*/

bubuko.com,布布扣
#include<iostream>
#include<cmath>
using namespace std;
double solve(double n)
{
     double intpart,fractpart,t;
     //double modf (double, double*); 将参数的整数部分通过指针回传, 返回小数部分
     fractpart = modf(n*log10(n),&intpart);
     t = pow(10,fractpart);
     modf(t,&intpart);
     return intpart;
}
int main()
{
     double n;
     while(cin>>n)
     {
          if(n!=0)
               cout<<solve(n)<<endl;
     }
 return 0;
}
bubuko.com,布布扣

关于<cmath>的modf函数

bubuko.com,布布扣
#include<stdio.h>
#include<math.h>
int main(void)
{
    double number=123.54;
    double fraction,integer;
           fraction=modf(number,&integer);
         //整数部分
    printf("%lf\n%lf\n",number,integer);
         //小数数部分
    printf("%lf\n%lf",number,fraction);
    return 0;
}
bubuko.com,布布扣

Resutlt:

123.540000
123.000000
123.540000
0.540000

前人的代码(数学思想很重要),布布扣,bubuko.com

前人的代码(数学思想很重要)

标签:style   blog   class   code   java   c   

原文地址:http://www.cnblogs.com/jianfengyun/p/3720970.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!