POJ1001Exponentiation,已AC

POJ 1001 - Exponentiation(求幂) 题目链接:POJ - 1001 题目概括: 求Rn R ∈ ( 0.0 , 99.999 ) 实数 n ∈ ( 0 , 25 ] 整数 题目解析: 看到样例输出,就发现不合适直接使用double类型来直接计算,应当使用数组来模拟乘法运算过程。 将实数R以字符串的形式读入,然后将小数点去除,转化成数组(倒序逐位储存),存储结果的数组,每个单元只存储1位数。数组空间开辟6*25=150稍大一点即可。 > 12.345 > a[0] = 5 a[1] = 4 a[2] = 3 a 阅读详情
求高精度幂
Time Limit: 500MS Memory Limit: 10000K
Total Submissions: 170398 Accepted: 41283

Description

对数值很大、精度很高的数进行高精度计算是一类十分常见的问题。比如,对国债进行计算就是属于这类问题。 

现在要你解决的问题是:对一个实数R( 0.0 < R < 99.999 ),要求写程序精确计算 R 的 n 次方(Rn),其中n 是整数并且 0 < n <= 25。

Input

T输入包括多组 R 和 n。 R 的值占第 1 到第 6 列,n 的值占第 8 和第 9 列。

Output

对于每组输入,要求输出一行,该行包含精确的 R 的 n 次方。输出需要去掉前导的 0 后不要的 0 。如果输出是整数,不要输出小数点。

Sample Input

95.123 12
0.4321 20
5.1234 15
6.7592  9
98.999 10
1.0100 12

Sample Output

548815620517731830194541.899025343415715973535967221869852721
.00000005148554641076956121994511276767154838481760200726351203835429763013462401
43992025569.928573701266488041146654993318703707511666295476720493953024
29448126.764121021618164430206909037173276672
90429072743629540498.107596019456651774561044010001
1.126825030131969720661201
题目分析:

由于该题数字太大,用pow函数是无法解决的,所以我们需要用字符数组来解决问题,采用STL创建一个string类型的可变数组可以方便我们进行操作。所需的步骤有六步:
①输入处理:由于我们正常输入,最高位是存在数组的最低位,所以我们需要先对其进行处理,将其倒置,并去掉小数点,并记录小数点的位置。
②模拟手算的过程:用mul表示每一次被乘的数(记得每乘完一个数都要将结果放入mul用于下一次运算),将乘数用一个数组ori记录(就等于输入的数据,因为它是不会变的),再用一个tmp数组存储每一位数操作得出的结果,用res数组存储总的结果(res是每一次tmp结果相加)具体过程看代码标注。
③插入小数点:用一个迭代器找到所需插入的位置,用insert函数即可,然后将mul数组(我最后懒得再将res=mul)翻转便于后面输出
④去除多余的0:用left和right分别代表小数点的左边和右边,找到有效数字的位置,最后根据left和right的位置进行输出。(要考虑是否有小数)
⑤最后就是简单的循环输出咯  代码中还有更详细的解释。
测试数据网上可以搜到,可以去看看自己哪一步错了。
话不多说(好像挺啰嗦的),看代码
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;

int main()
{
    string inp;//接收数据;
    string mul;//处理后的数据
    string res;//最终数据
    int n;//阶乘
    while(cin>>inp>>n)
    {
        res="0";
        int len_inp=int(inp.length());
        int pos=0;//小数点位置
        for(int i=len_inp-1;i>=0;i--)//寻找小数点并且将数据存入新的s
        {
            if(inp[i]!='.')
                mul+=inp[i];
            else
                pos=len_inp-i-1;
        }
        string tmp;//每乘一个数的结果
        int mul_cnt;//乘数
        int len_mul = len_inp-1;
        int i,j;
        int res_len = len_mul;
        res=mul;
        pos=pos*n;//小数点最终位置
        string ori=mul;//每次乘的数
        while(n--)
        {
            
            mul.clear();
            mul=res;//重新定义被乘数
            len_mul=res_len;//重新规定被乘数的长度
            for(i=0;i<len_inp-1;i++)//第一重,原始数据的每一个数
            {
                mul_cnt=ori[i]-'0';
                int jinwei=0;
                for(j=0;j<len_mul;j++)//第二重,乘数乘以被乘数的每一个数字
                {
                    int fir_cnt=0;
                    fir_cnt=(mul_cnt*(mul[j]-'0')+jinwei)%10;//当前个位数结果
                    jinwei=(mul_cnt*(mul[j]-'0')+jinwei)/10;//十位数结果
                    tmp+=fir_cnt+'0';//存入tmp中
                }
                if(jinwei)//如果被乘数的最后一位乘完还有进位,则需在tmp后多加一位
                    tmp+=jinwei+'0';
                if(i==0)//因为乘法中第一次乘不用与原来的相加。手算的第一步
                {
                    res.clear();//有点多余,保险
                    res=tmp;//直接等于就好
                }
                else
                {
                    if(res.length()<(tmp.length()+i))//因为相加需要移位,为了方便,将他们的位数都用0补齐
                    {
                        int cha=int(tmp.length()-res.length())+i;//i是所需移位的距离
                        while(cha--)
                        {
                            res+='0';
                        }
                    }
                    int jinwei=0;
                    int x;
                    for(x=0;x<tmp.length();x++)
                    {
                        int sum=(res[x+i]-'0'+tmp[x]-'0')+jinwei;//将他们的字符提出来int化
                        jinwei=0;
                        if(sum>=10)
                        {
                            sum%=10;
                            jinwei=1;
                        }
                        res[x+i]=sum+'0';
                    }
                    if(jinwei)//与前面一样
                        res+='1';
                }
                res_len=int(res.length());//千万要记得重新测量长度,否则下次就不知道要乘几位数了
                tmp.clear();//将这次的结果清零
            }
        }
        //清零与输出操作
        string::iterator it;
        it=mul.begin();
        mul.insert(it+pos,'.');//找到位置插入
        reverse(mul.begin(), mul.end());
        int co_pos=int(mul.find('.'));//找出小数点的位置
        int left,right;
        //分别从最左边与最右边开始,遇到非零就停下
        for(left=0;left<co_pos;left++)
        {
            if(mul[left]!='0')
                break;
        }
        for(right=int(mul.length())-1;right>co_pos;right--)
        {
            if(mul[right]!='0')
                break;
        }
        if(right==co_pos)//特别注意当没有小数的时候
        {
            for(int i=left;i<right;i++)
                cout<<mul[i];
        }
        else
        {
            for(int i=left;i<=right;i++)
                cout<<mul[i];
        }
        cout<<endl;
        mul.clear();//记得清零,这一组数据结束
    }
    return 0;
}


POJ PKU 必做题+部分难题1001-2500 1011,1012,1013,1014,1015,1017,1026,1028,1032,1035,1041,1046,1129 1149 1154 1165 1182 1185 1190 1191 1201 1251 1273 1275 1276 1286 1322 1338 1363 1364 1401 1456 1459 1564 1579 1637 1657 1658 1679 1716 1742 1775 1797 1711 1833 1838 1844 1882 1929 1942 1961 1988 2013 2104 2112 2115 2186 2255 2352 2369 2406 2409 2421 2479 2480 2498 立即下载

相关推荐

SAP Script表单开发中ABAP preform方法的实战应用与调试技巧

本文深入探讨了在SAP Script表单开发中调用ABAP程序(preform方法)的实战应用与调试技巧。通过一个获取供应商版本名称的实例,详细讲解了如何在SE71中嵌入PERFORM指令、编写ABAP子程序进行数据查询与处理,并重点介绍了使用SAP Script Debugger进行高效调试的方法,帮助开发者灵活扩展表单功能,实现复杂业务逻辑。

o0p1q2r3的博客 551

POJ 1001——高精度快速幂

POJ 1001——高精度快速幂 本题主要用到两个东西,一个是高精度,一个是快速幂。 虽然是浮点数的乘法,但是实际上可以转化为整数的乘法,然后再用高精度乘法,高精度算法本身不难,但是在没重载运算符的情况下使用数组还是挺麻烦的,不少地方的初始化都需要特别注意。 关于数组的初始化: 数组名在函数内部时,它的sizeof数组名获得的是数组本身的长度,而数组作为函数形参的时候,sizeof获得的是这个指针本身的长度,这一点特别坑,这会导致memset函数出现问题。 关于快速幂: 快速幂是一种快速求出数字的幂的方法,

qq_43513855的博客 1228

2021哈工大网安837考研初试经验贴

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

weixin_41797880的博客 6522

POJ 1001

大数相乘问题 1.将输入的字符串转化化成整型存储在number 中,运算时每次乘以number 2.将输入的字符串逆向存储在整型数组a[]中,用于存储每次乘以number后的结果 3.具体运算过程就是求number的n次方,每次运算以a[]中的每一位数字乘上number 4.用point计算小数的位数,输出时逆序输出a[],并且处理小数个数即可 #include &lt;stdio.h...

路漫漫其修远兮,吾将上下而求索 2085

UNext:基于 MLP 的快速医学图像分割网络

有代码,可深入学习轻量级分割模型的论文切入点 UNet 及其最新扩展(如 TransUNet)近年来一直是领先的医学图像分割方法。然而,这些网络无法有效地用于应用中的快速图像分割,因为它们参数繁重、计算复杂且使用缓慢。为此,我们提出了 UNeXt,它是一种基于卷积多层感知器(MLP)的图像分割网络。我们以有效的方式设计了 UNeXt,其中包括早期卷积阶段和潜在阶段的 MLP 阶段。我们提出了一个标记化的 MLP 块,我们可以在其中有效地标记和投影卷积特征,并使用 MLP 来对表示进行建模。

Philo的博客 3941

ScottPlot vs LiveCharts:WPF图表库性能对比与MVVM适配方案

本文深度对比了WPF图表库ScottPlot与LiveCharts在性能与MVVM架构适配上的表现。通过十万级数据点的基准测试,ScottPlot在渲染速度与内存占用上优势显著。文章重点探讨了两种库在MVVM模式下的集成方案,为开发者根据项目需求(如实时监控或快速原型)进行技术选型提供了实战指导。

lll78的博客 245

POJ 1001(浮点数高精度幂) 解题报告

/*__________________________________________________POJ 1001题______________________________________________________ 求高精度幂 Time Limit: 500MS Memory Limit: 10000K Tot

Why So Serious? 2879

深入理解梅尔刻度、梅尔滤波器组和梅尔时频谱图

读取一段音频,使用短时傅里叶变换,得到普通的时频谱图,然后绘制梅尔滤波器组,值得注意的是,librosa的梅尔滤波器组函数还带有权重归一化功能,即对一个三角形滤波器的每个权重,都除以该三角形的面积,如果不希望进行该归一化,设置参数。从公式可见,对数部分可以以自然对数为底数,也可以以10为底数,不同的底数对应不同的系数,要确定当前的系数,只需要代入(1000Hz, 1000mel)即可。其中,m是当前滤波器的序号,表征了当前的时间段,k是当前频率的序号,表征了当前正在对哪一频率的。

DEDSEC_Roger的博客 1万+

poj1001(大数据)

这个问题是要请你求出 Rn 的精确值。在这里R是一个实数(0.0 Input 每组测试资料一列,包含了R,n,R的位置为第1行到第6行,n的位置为第8行到第9行。 Output 输出 Rn 的精确值。前后方无作用的0不应该出现。 Sample input 95.123 12 0.4321 20 5.1234 15 6.7592 9

u014236804的专栏 721

2026华为OD面试题029:勇攀数字高峰

在给定的数字地形图里寻找登山路径,数字代表当前位置的海拔高度。要求从最低海拔出发,不断攀登,最终到达最高山峰。地图保证最低海拔和最高山峰都只有一个。 登山规则: - 路径上的海拔必须严格递增 - 只能向上下左右 4 个方向移动 - 路径必须从最低海拔开始,到最高海拔结束 - 每个地点只能走一次 - 每一步的攀登高度差必须大于 0,且不超过指定值 `K` 输出满足条件的登山路径的数量。

琅嬛福地 116

课设:FPGA音频均衡器 verilog设计及仿真 加报告

未来,随着FPGA技术的进一步发展和应用场景的扩大,FPGA音频均衡器将发挥出更大的作用,并为音频领域带来更多创新和突破。(a)音乐制作:均衡器可以调整音频信号中不同频段的能量分布,使得乐器声音更加明亮、动感,从而提升音乐制作的质量和创作的灵活性。以上步骤提供了设计一个音频均衡器的大致过程,但值得注意的是,具体实现的细节和复杂度可能因设计要求和所使用的平台而有所不同。确保设计满足预期的性能和要求。确定均衡器的功能和要求:定义你的音频均衡器需要实现的功能,包括频率范围、增益范围以及可调参数数量等。

QQ_778132974的博客 1587

poj1001_Exponentiation

poj1001_Exponentiation 这题真是超级大模拟。好繁琐,自己写的打数加法,乘法,写的比我大一时候写的要好很多,大一是借助C++里面的string来写的,这把只用了C,浇一次就ac了,挺开心的,不过写了2个小时啊。注意零的处理。大体思路就是先找出有多少位小数,要提前处理掉后面补充位置的零,然后把这个数转换成整数,做n次方,然后输...

weixin_30537451的博客 101

一个人干完整个运营团队!浙大开源「Easel」全链路拆解:从热点发现到自动发布,一个 Agent 直接做出来

一个人干完整个运营团队?浙大 REAL 实验室开源的 Easel,把 OpenClaw Agent、账号画像、114 个内容技能和真实媒体工具接在一起:从热点发现、选题策划、图文视频创作,到七平台适配发布、数据归因复盘,全链路一个 Agent 闭环完成,产物按项目归档。本文完整拆解其五层工作流、四层 Prompt Stack 架构、画像内联机制、Skill 三层加载与产物契约,附安装部署、.env 关键配置、Embedding 避坑、已知问题修复等实战干货,全程无虚构、可复现。

program哲学 283

【模拟】poj 1001 Exponentiation (hdu 1063)

poj 1001 Exponentiation 大数大数 链接:http://poj.org/problem?id=1001 题意: 题意很简单,给你2个数(前面的是小数,后面是不超过25的整数),求得前一个数的幂(后一个数作指数部分)。 思路: 要求小数的幂,用一般的double,float完全满足不了解的需求。而且看到案例就知道肯定用大数解决。 大数解决最简单的看来是用JAVA

学无纸巾 502

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

POJ1001 Exponentiation

考查:大数乘法 字符串操作提交:1次CE 一次AC 0MS其实本科的时候就做这道题了,但一直留到现在了,包括1002,终于把这两个遗留了这么长时间的题过了~记得当时在网上看到过这个题,用字符串模拟乘法运算时的代码很简洁,但这次却没找到,凭记忆大概写了下。需要注意的是题目要求,如100.00 2要输出10000,不要点。另外需要注意的基本上都写在了注释中。#include #include char R[7]; int n,dot; char a[150]; char ans[150]; vo

sunacmer的专栏 2244

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

[POJ] 1001 Exponentiation

Exponentiation Time Limit: 500MS Memory Limit: 10000K Total Submissions: 188955 Accepted: 45370 Description Problems involving the computation of exact values of very large magnitude and p...

RoderickLi-努力努力再努力 269

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

1001 -- Exponentiation

http://poj.org/problem?id=1001 把数组大小从60改到100,500改到10000,居然忘记了改初始化方法里的循环条件,真是被自己蠢哭了..当年吃着东西一遍AC的题居然WA7次 代码后有从题目Discuss里扒来的测试数据 1 #include<stdio.h> 2 #include<string.h> 3 ...

bangrao3055的博客 138

【高精度模拟】POJ 1001 Exponentiation

这段时间要沉迷刷题一段时间了,就让优快云陪我一起吧! 一、题目大意 题目意思很简单,就是要你求一个小数幂次的高精度值。 二、题目思路以及AC代码 这种题,不得不说,虽然写高精度写的很爽,但需要考虑的情况真的是太多了。我尽量的总结一下,高精度方面就没什么可说的了。 首先,第一个要注意的问题是,虽然让你算的是小数的乘法,但你不要傻了吧唧的去做小数的高精度,因为小数的乘法其实就整数的乘法加一个小数...

Johnson的博客 185

POJ 1001 Exponentiation 求高精度幂

题目链接 Description Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of the national debt is a taxing experience for many...

RPG_Zero的博客 256

HDU 1063 Exponentiation

跟POJ 1001 一样的题。不过数据很奇葩就是了。 用POJ AC的程序提交过不了,于是重写了。 注意: 001200 0 =1 001200 1 =1200 0.0000 2 =0 00000  1 =0 0000.  1 =0 反正各种能想到的都试试就知道了。 #include #include #include #include #incl

自己选择的路,跪着也要走完。 697

POJ 1001 解题报告 Exponentiation

2011-11-23 高精度浮点数计算。 花了我整整一天时间才写好,POJ上给的测试数据都通过,0的1次方和1的0次方之类的输入和加入一些干扰0的输入测试也都通过,但是提交后AC不了,显示Anwser Wrong,不知道什么问题,也没找出来。崩溃了。 好好练练吧,鉴于道理已明了,先草草结贴,有时间再看。 #include #include #include using name

Today is a gift 600

POJ 1001.Exponentiation

题目:http://icpc.njust.edu.cn/Problem/Pku/1001/ AC代码(C++): #include #include #include #include #include using namespace std; int main(void) { char sample[7]; int sn; int cn = 0; char rs[5

njyexiong的博客 393

【Nan‘s POJ】1001 Exponentiation 高精度算法

【Nan’s POJ】1001 Exponentiation 高精度算法 高精度算法相关 找到一篇入门的博文,感觉写的很详细了,在此转载一下: https://blog.youkuaiyun.com/zsjzliziyang/article/details/82050337 本题思路 主要就是高精度计算的基本思路,实现高精度乘法,用 long long什么的是无法实现的。 Mark几个重点: ①对于很大的数,可先用一个字符串输入。再利用字符串函数等操作将每一位数取出,存入一个整型或short数组里,数组的每一位表示这个

qq_42735614的博客 197

POJ1001 HDU1063 UVA748 UVALive5356 Exponentiation【大数】

Exponentiation Time Limit: 500MS Memory Limit: 10000K Total Submissions: 185108 Accepted: 44559 Description Problems involving the computation of exact values of very large magnitude and precision a...

海岛Blog 846

POJ 1001 Exponentiation

DescriptionProblems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of the national debt is a taxing experience for many comp

Czy 900

POJ1001 Exponentiation【高精度】

题目大意: 给你一个浮点数 s 和整数 N,求 s 的 N 次方。其中(0 < N <= 5),而浮点数 s 算上小 数点共占 6 位。 解题思路: 考虑到浮点数 s 最多只有 6 位,且 N 最多为25,那么通过 s 的小数点位置计算出小数 点在 s 的 N 次方的结果中的位置。然后将 s 变为不含小数点的整数 num,通过高精度 乘以单精度的模板求出 num 的 N 次方。然后根据题目要求输出结果。 注意:不仅要清除整数部分的前导 0,还要清除小数部分后边的 0。

程序员充电站(itcharge) 787
上一篇: 特殊密码锁,openjudge全局题号8496,已AC
下一篇: ZOJ1002 Fire Net DFS(深度优先搜索) 已AC
Link_Ray
博客等级 码龄9年 44粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值