NOJ1659 求值 log10取对+floor

 

  • 问题描述
  • 给你三个数a,b,c,求a的b次的前c位数(不够c位输出全部即可)
  • 输入
  • 输入数据有多组,每组占一行,有三个整数,之间有空格。(0<a,b<2147483648,0<c<10)
  • 输出
  • 对于每组输入数据,输出一行.
  • 样例输入
  • 55 20 6
    10 5 2
  • 样例输出
  • 641584
    10

想法:看题目就知道无法使用数组,这就要想到使用对数来使数据以指数形式储存,因为c是小于10,这个办法显然可行。具体思路上,a^b=x,那么设t=b*log10(a),于是,t的整数部分即为10的n次方,相当于x/10^n,而t的小数部分就可以拿来控制位数,当要求c位时乘以10^(c-1)即可。核心代码 int(pow(10, x)*pow(10, c-1))。注意类型转换,和精度问题。

 1 #include <stdio.h>
 2 #include <iostream>
 3 #include <algorithm>
 4 #include <math.h>
 5 #include <string.h>
 6 using namespace std;
 7
 8 int main()
 9 {
10     double a, b, c;
11     double t, x;
12     while(~scanf("%lf%lf%lf", &a, &b, &c))
13     {
14         t = b*log10(a);
15         if(t >= c*1.000000 )
16         {
17             x=t-floor(t);
18             cout << int(pow(10, x)*pow(10, c-1)) << endl;
19         }
20         else cout << pow(a, b) << endl;
21     }
22 }
时间: 2024-10-01 00:23:35

NOJ1659 求值 log10取对+floor的相关文章

行列式求值 (取模)

typedef __int64 lld; lld a[205][205]; int sign; lld N,MOD; void solved() { lld ans=1; for(int i=0;i<N;i++)//当前行 { for(int j=i+1;j<N;j++)//当前之后的每一行,因为每一行的当前第一个数要转化成0(想想线性代数中行列式的计算) { int x=i,y=j; while(a[y][i])//利用gcd的方法,不停地进行辗转相除 { lld t=a[x][i]/a[y

Diagram Designer 的表达式求值工具(Expression Evaluator)

软件版本:Diagram Designer (Version 1.24) 一.Diagram Designer 的表达式求值工具 下图为 Diagram Designer 的表达式求值工具: 在程序的帮助手册中,对这个表达式求值工具的使用有着较为详细的描述.(在[Using Diagram Designer]的[Expression Evaluator]章节,不过内容是英文的) 里面提到了这个表达式求值工具有下面几个特征(Notable Features): trigonometric func

ffmpeg文档08-表达式计算/求值

8 表达式计算/求值 在计算表达式时,ffmpeg通过libavutil/eval.h接口调用内部计算器进行计算. 表达式可以包含一元运算符.运算符.常数和函数 两个表达式expr1和expr2可以组合起来成为"expr1;expr2" ,两个表达式都会被计算,但是新表达式(组合起来的)值实为表达式expr2的值. 表达式支持的二元运算符有:+,-,*,/,^ 一元运算符:+,- 以及下面的函数: abs(x) 返回x的绝对值. acos(x) 计算x反余弦 . asin(x) 计算x

递推求值【快速幂矩阵】

递推求值 描述 给你一个递推公式: f(x)=a*f(x-2)+b*f(x-1)+c 并给你f(1),f(2)的值,请求出f(n)的值,由于f(n)的值可能过大,求出f(n)对1000007取模后的值. 注意:-1对3取模后等于2   输入 第一行是一个整数T,表示测试数据的组数(T<=10000)随后每行有六个整数,分别表示f(1),f(2),a,b,c,n的值.其中0<=f(1),f(2)<100,-100<=a,b,c<=100,1<=n<=10000000

使用逆波兰式进行表达式求值

中缀表达式及后缀表达式图解中说明了使用逆波兰式进行表达式求值的方法,这里使用C++进行实现.实现和原理讲解有一点不同,需要进一步进行细化. 关于将中缀表达式转换成后后缀表达式的规则: 规则:从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分:若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于找顶符号(乘除优先加减)则栈顶元素依次出找并输出,并将当前符号进栈,一直到最终输出后缀表达式为止. 上面的规则转换成下面的执行规则: 1.遇到操作数:直接输出(添加到后缀

结构体大小求值

 内存对齐概念,struct例子: struct stu{ char a; intb; char c; double d; char e; } 取pack(n),n,取结构体中最大成员大小m,取两个小值k, k = m< n?m:n; 取每个成员大小p,依次同k比较,取小值q = k< p?k:p; 第二步当中依次取得的值,即为内对齐标准,所谓的对齐,即此处的地址可被q整除. K值可作为外部对齐补0的依据. 当有数组的时候拆散了当普通变量存储. 下面开始计算结构体中的大小 取k值.(取pa

NYOJ-301递推求值

递推求值 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给你一个递推公式: f(x)=a*f(x-2)+b*f(x-1)+c 并给你f(1),f(2)的值,请求出f(n)的值,由于f(n)的值可能过大,求出f(n)对1000007取模后的值. 注意:-1对3取模后等于2 输入 第一行是一个整数T,表示测试数据的组数(T<=10000)随后每行有六个整数,分别表示f(1),f(2),a,b,c,n的值.其中0<=f(1),f(2)<100,-100<=

[转载]Windows下的分页模式- 页目录和页表从物理内存到虚拟映射求值

标 题: [原创]Windows下的分页模式-  页目录和页表从物理内存到虚拟映射求值 作 者: hrpirip 时 间: 2012-12-06,12:45:36 链 接: http://bbs.pediy.com/showthread.php?t=159554 昨天在网上看到一段代码令大为不解,大家都知道一个虚拟地址到物理地址的转换伪公式为:*(*(*PD[(VirtualAddress>>22)] & FFFFF000) [(VirtualAddress & 3FF000)

shell编程基础一(多种方法求值1+2+..+100)

#SHELL编程基础一(多种方法求值1+2+..+100)##为什么要学好shell shell脚本语言是实现linux系统管理及自动化运维所必备的重要工具,linux系统的底层及基础应用软件的核心大都涉及shell脚本的内容. 每一个合格的linux系统管理员或运维工程师,都需要能够熟练地编写shell脚本语言,并能够阅读系统及各类软件附带的shell脚本内容. 只有这样才能提升运维人员的工作效率,适应日益复杂的工作环境,减少不必要的工作,从而为个人的职场发展奠定较好的基础.# 本文的宗旨是熟