• [1659] 求值

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

这题WA好多次,发现是自己乱搞多加了几个1e-8。全去掉就A了。还是C++方便,算法思路均来自于学长,看完临摹了一下而已。

主要思想:a的b次幂 取前c个数,显然这种题不会是傻瓜式相乘,那可以先把结果变成很小的double实数,然后再通过乘10^n改变小数点来得到答案。因此用到log10,为什么是10?因为10^(n.xxxxx)n次和10^(0.xxxxx)区别只在于小数点的位置即10的倍数关系(由指数和幂运算法则可以得出)又10^(0.xxxxx)会大于0小于1,那简单了,先得到这个大于0小于1的基数,再通过乘以10^n次把他变成答案。

简洁点就是把a^b表示成10^n,再看n和题中c的大小来确定答案。

代码:

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
typedef __int64 ll;
ll POW(const ll &a,ll b)//快速幂,但是这题指数很小,基本没用就当练习吧
{
ll r=1,base=a;
while(b!=0)
{
if(b&1)
r=r*base;
base=base*base;
b>>=1;
}
return r;
}
int main (void)
{
ll a,b,c;
double zhishu1,zhishu2;
ios::sync_with_stdio(false);//取消同步加速(这题并没什么卵用)
while (cin>>a>>b>>c)
{
zhishu1=b*log10((double)a);//log运算把指数放前面,因此可以将a^b表示成10^n即a^b=10^zhishu1
if(zhishu1>=(double)(c))//位数和指数的大小关系
{
zhishu2=zhishu1-floor(zhishu1);
cout<<(ll)(pow(10.0,zhishu2) * (double)POW(10,c-1))<<endl;
}
else
cout<<POW(a,b)<<endl;
}
return 0;
}

NOJ——1659求值(log10取对数+floor取整数部分+可有可无的快速幂)的更多相关文章

  1. ACM程序设计选修课——1024: 末位零(求末尾0的方法+可有可无的快速幂)

    1024: 末位零 Time Limit: 1 Sec  Memory Limit: 32 MB Submit: 60  Solved: 11 [Submit][Status][Web Board] ...

  2. 2018 焦作网络赛 L Poor God Water ( AC自动机构造矩阵、BM求线性递推、手动构造矩阵、矩阵快速幂 )

    题目链接 题意 : 实际上可以转化一下题意 要求求出用三个不同元素的字符集例如 { 'A' .'B' .'C' } 构造出长度为 n 且不包含 AAA.BBB CCC.ACB BCA.CAC CBC ...

  3. NOJ1659 求值 log10取对+floor

      问题描述 给你三个数a,b,c,求a的b次的前c位数(不够c位输出全部即可) 输入 输入数据有多组,每组占一行,有三个整数,之间有空格.(0<a,b<2147483648,0<c ...

  4. 515Nod 1126 求递推序列的第n项【矩阵快速幂】

    有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A,B和N,求f(n)的值. Input 输 ...

  5. poj3070 求斐波那契数列第n项 ——矩阵快速幂

    题目:http://poj.org/problem?id=3070 用矩阵快速幂加速递推. 代码如下: #include<iostream> #include<cstdio> ...

  6. 51Nod 1126 求递推序列的第N项(矩阵快速幂)

    #include <iostream> #include <algorithm> #include <cmath> #define MOD 7 #define N ...

  7. 洛谷P1226 【模板】快速幂||取余运算

    题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 输入格式: 三个整数b,p,k. 输出格式: 输出“b^p mod k=s” s为运算结果 S1: ...

  8. POJ 3233-Matrix Power Series( S = A + A^2 + A^3 + … + A^k 矩阵快速幂取模)

    Matrix Power Series Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 20309   Accepted:  ...

  9. hdu4686 简单的矩阵快速幂求前n项和

    HDU4686 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4686 题意:题目说的很清楚了,英语不好的猜也该猜懂了,就是求一个表达式的前n项和,矩阵 ...

随机推荐

  1. 主成分分析法(PCA)答疑

    问:为什么要去均值? 1.我认为归一化的表述并不太准确,按统计的一般说法,叫标准化.数据的标准化过程是减去均值并除以标准差.而归一化仅包含除以标准差的意思或者类似做法.2.做标准化的原因是:减去均值等 ...

  2. Oracle 闪回 找回数据的实现方法

    Oracle 闪回 找回数据的实现方法 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复.这篇文章主要介绍了Oracle 闪回 找回 ...

  3. IOS中将颜色转换为image

    - (UIImage *)createImageWithColor:(UIColor *)color { CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f ...

  4. d3.js--03(增删改查)

    选择元素 d3.select():是选择所有指定元素的第一个 d3.selectAll():是选择指定元素的全部 插入元素 append():在选择集末尾插入元素 insert():在选择集前面插入元 ...

  5. cron job 里面,如何让脚本半分钟运行一次?

    cron job 里面,如何让脚本半分钟运行一次? cron本身实现不了.但可以借助于sleep命令实现. 解决方法: 两个脚本 一个正常,一个增加sleep 30 crontab设置同时启动 在有的 ...

  6. chrome浏览器 配置开机启动全屏(看板app模式设置)

        chrome浏览器 配置开机启动全屏(看板app模式设置) 1.下载安装chrome浏览器. 2.建立一个chrome浏览器的快键方式,右键打开属性,如下图: 3.将目标选项卡的值修改为:&q ...

  7. VIM 编辑器 -使用详解记录

    1.什么是 vim? Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用.简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但 ...

  8. 编译-LAMP基于fastcgi

    前言 最近没更新新篇幅了,今天就来点干活,过多的也不说了下面着手干!干!干! 准备环境 centos7.5 apr-1.6.3.tar.gz  apr-util-1.6.1.tar.gz      h ...

  9. Linux菜鸟起飞之路【九】系统启动流程

    Linux系统启动流程 BIOS -> MBR  -> BootLoader -> Kernel -> init 1.打开电源后,计算机从主板的BIOS中读取其中存储的程序.这 ...

  10. IDEA入门学习笔记1:资料收集

    IDEA2018软件下载 :https://mp.weixin.qq.com/s?__biz=MzIwMjE1MjMyMw==&mid=2650200056&idx=1&sn= ...