首页 > 代码库 > 前人的代码(数学思想很重要)
前人的代码(数学思想很重要)
/*
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 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; }
关于<cmath>的modf函数
#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; }
Resutlt:
123.540000
123.000000
123.540000
0.540000
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。