算法练习——ACM_1001_Exponentiation
求高精度幂
Time Limit: 500MS Memory Limit: 10000K
Total Submissions: 126980 Accepted: 30980
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 。如果输出是整数,不要输出小数点。
解决思路
这是一道高精度的题,主要是处理前导0和末尾0的时候有点麻烦。例如100.00可能会处理成1。
/**
求高精度幂
Time Limit: 500MS Memory Limit: 10000K
Total Submissions: 126980 Accepted: 30980Description
对数值很大、精度很高的数进行高精度计算是一类十分常见的问题。比如,对国债进行计算就是属于这类问题。现在要你解决的问题是:对一个实数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 。如果输出是整数,不要输出小数点。解决思路这是一道高精度的题,主要是处理前导0和末尾0的时候有点麻烦。例如100.00可能会处理成1。程序使用:http://my.oschina.net/leopardsaga/blog/123495?fromerr=atjgdwtv
*/
#include "stdafx.h"
#include<stdio.h>
#include<math.h>
#include<string>int len_r;
int* pow_s(int x,int n,int len);int main(){char num_c[6];int N;while(scanf("%s %d", num_c, &N) != EOF){int position=0, i=0, num=0, j=0,len=0;for (i=0; i<strlen(num_c); i++) {if (num_c[i] == '.'){position = (strlen(num_c) - 1 - i) * N; // calculate decimal point position after R^n}else{ num = num*10 + num_c[i] - 48; // transfer float to integerif(num*10/1){len++;}} }int* result = pow_s(num,N,len);if(len_r < position){printf("."); // print decimal pointfor (i=0; i<position-len_r; i++){printf("0"); // print zero between decimal point and decimal}//while (product[j] == 0) // trim trailing zeros{// j++;//}for (i=len_r-1; i>=j; i--){printf("%d", result[i]);}} else {while (result[j]==0 && j<position){ // trim trailing zerosj++;}for (i=len_r-1; i>=j; i--){if (i+1 == position){ // cause index in C language starts from 0 printf(".");}printf("%d", result[i]);}}free(result);} free(num_c);return 0;
}int* pow_s(int a,int n,int len){int i,j,carry=0;int* result = (int*)malloc(sizeof(int)*(len)*n);result[0] = 1;len_r = 1;for (j = 0; j < n; j++){for (i = 0; i < len_r; i++){int temp = result[i]*a + carry;result[i] = temp % 10;carry = temp / 10; }while (carry){result[i++] = carry % 10;carry /= 10;}len_r = i;} return result;
}
程序使用:http://my.oschina.net/leopardsaga/blog/123495?fromerr=atjgdwtv
转载于:https://www.cnblogs.com/zhuqingqin/p/5396650.html
算法练习——ACM_1001_Exponentiation相关推荐
- golang通过RSA算法生成token,go从配置文件中注入密钥文件,go从文件中读取密钥文件,go RSA算法下token生成与解析;go java token共用
RSA算法 token生成与解析 本文演示两种方式,一种是把密钥文件放在配置文件中,一种是把密钥文件本身放入项目或者容器中. 下面两种的区别在于私钥公钥的初始化, init方法,需要哪种取哪种. 通过 ...
- 通用解题法——回溯算法(理解+练习)
积累算法经验,积累解题方法--回溯算法,你必须要掌握的解题方法! 什么是回溯算法呢? 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就&quo ...
- 伍六七带你学算法 进阶篇-生命游戏
有趣的算法题–生命游戏 难度-中等 根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机. 想要体验生命游戏的小伙伴可以到这里-->生命游戏 进入 ...
- 伍六七带你学算法 进阶篇-排序算法
给定一个整数数组 nums,将该数组升序排列. 示例 1: 输入:[5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:[5,1,1,2,0,0] 输出:[0,0,1,1,2,5] 各排序算 ...
- 伍六七带你学算法 入门篇-卡牌分组
力扣-914. 卡牌分组 难度-简单 这是一道非常有趣的题,提交通过率令人深思 ,思考它是不是一道简单的题- 开始正题: 给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以 ...
- 伍六七带你学算法 入门篇-最小的k个数
java面试题-最小的k个数 难度-简单 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 示例 1: 输入:a ...
- 十大算法,描述+代码+演示+分析+改进(赶紧收藏!)
十大算法 1.冒泡排序 (1)算法描述 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来.走访数列的工作是重复地进行直到没有再需要 ...
- 人工智能3d建模算法_打破国外垄断,全国产3D芯片为机器人“点睛”
◎ 科技日报记者 崔爽 传统机器人只有"手",只能在固定好的点位上完成既定操作,而新一轮人工智能技术大大推动了机器和人的协作,这也对机器人的灵活性有了更高要求. 要想像人一样测量. ...
- 算法设计思想(5)— 递归法
1. 递归概念 递归 Recursion是指在函数的定义中使用函数自身的方法,直观上来看,就是某个函数自己调用自己. 递归有两层含义: 递归问题必须可以分解为若干个规模较小.与原问题形式相同的子问 ...
最新文章
- VMware15克隆虚拟机Centos
- 中文ocr识别通过crnn
- 人脸识别有哪些利与弊
- 基于 Ubuntu 系统安装 CUDA 和 cuDNN
- html中代码执行顺序
- jdbc连接mysql8的一些坑_mysql8.0 jdbc连接注意事项
- 【渝粤教育】电大中专电商运营实操 (18)作业 题库
- 作者:李涛,男,南京邮电大学计算机学院、软件学院院长,南京邮电大学大数据研究院院长。...
- kafka创建topic报错
- microsoft edge怎么截长图_实用技能 | Fireshot 网页截长图工具
- windows98远程桌面连接
- 计算机项目答辩评分标准,课题答辩评分标准是什么
- 银河麒麟v10离线安装docker-ce
- Editor编辑器操作
- 不会真有人Macbook录屏没声音吧?别用SoundFlower了!
- JAVA爬需要账号登录的网_如何用 Python 爬取需要登录的网站?
- 微信小程序从前端wxml页面数据获取,到JS页面数据对象字符化,传递给后台,前台再从后台获取数据并在wxml页面动态展示数据(前后台交互实现发表动态功能)
- 7-4 天长地久 (20分)
- Educoder - Java类和对象之对象组合之求圆锥体表面积
- 我的世界java版注册账号教程_我的世界java版官方购买教程
热门文章
- Linux下对SVN的相关操作命令
- C#后台导入css和设置前台关键字和描述
- 自学大数据:用以生产环境的Hadoop版本比较
- ibatis自动生成插件
- cms是什么意思啊_GC 知识点补充——CMS
- 【Groovy】map 集合 ( map 集合操作符重载 | - 操作符重载 | 代码示例 )
- 【C 语言】数组 ( 指针数组用法 | 自我结束能力 )
- 【Android RTMP】音频数据采集编码 ( 音频数据采集编码 | AAC 高级音频编码 | FAAC 编码器 | Ubuntu 交叉编译 FAAC 编码器 )
- 【Android NDK 开发】Ubuntu 函数库交叉编译 ( Android 动态库交叉编译 | Android 静态库交叉编译 )
- thinkphp5.1+ 使用 Redis 缓存