NYOJ 155 求高精度幂

求高精度幂

时间限制:3000 ms  |  内存限制:65535 KB

难度:2

描述

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

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

输入
输入有多行,每行有两个数R和n,空格分开。R的数字位数不超过10位。
输出
对于每组输入,要求输出一行,该行包含精确的 R 的 n 次方。输出需要去掉前导的 0 后不要的 0 。如果输出是整数,不要输出小数点。
样例输入
95.123 12
0.4321 20
5.1234 15
6.7592  9
98.999 10
1.0100 12
样例输出
548815620517731830194541.899025343415715973535967221869852721
.00000005148554641076956121994511276767154838481760200726351203835429763013462401
43992025569.928573701266488041146654993318703707511666295476720493953024
29448126.764121021618164430206909037173276672
90429072743629540498.107596019456651774561044010001
1.126825030131969720661201
AC码:
#include<stdio.h>
#include<string.h>
#define MAX 300
long long num[MAX];
int main()
{
	long long R=0,n=0;
	long long i,j,k,count=0;
	char ch[15];
	while(scanf("%s%ld",ch,&n)!=EOF)
	{

		R=0;
		count=0;
		for(i=0;i<strlen(ch);i++)
		{
			if(ch[i]!=‘.‘)
				R=R*10+(ch[i]-‘0‘);
			else
				count=strlen(ch)-i-1;
		}
		if(n==0)
		{
			if(R>0)
				printf("1\n");
			else
				printf("0\n");
			continue;
		}
		for(i=0;i<MAX-1;i++)
			num[i]=0;
		num[MAX-1]=1;
		k=MAX-1;
		for(i=1;i<=n;i++)
		{
			j=MAX-1;
			while((j<=MAX-1)&&(j>=k))
			{
				num[j]*=R;
				j--;
			}
			for(j=MAX-1;j>=k;j--)
			{
				while(num[j]>9)
				{
					num[j-1]+=num[j]/10;
					num[j]=num[j]%10;
					j--;
				}
			}
			k=j+1;
		}
		if(count*n-MAX+k>=0)
		{
			printf(".");
			for(i=1;i<=count*n-MAX+k;i++)
				printf("0");
		}
		j=MAX-1;
		while((num[j]==0)&&(MAX-j+1<=count*n))
			j--;
		for(i=k;i<=j;i++)
		{
			if((i-k)==(MAX-k-count*n))
			{
				if(num[i]!=0)
					printf(".");
				else
					break;
			}
			printf("%d",num[i]);
		}
		printf("\n");
	}
	return 0;
}

NYOJ 155 求高精度幂

时间: 2024-10-12 04:10:31

NYOJ 155 求高精度幂的相关文章

nyoj 155 求高精度幂 【大数】

做了一下午,总算做出来了!! 思路:将R转换成整数,同时计算好小数的个数,计算整数的次幂之后,然后根据规律将小数点适当的时候输出(如有3位实际小数,则应在第36位输出小数点) 链接http://acm.nyist.net/JudgeOnline/problem.php?pid=155 代码: #include<stdio.h> #include<string.h> int main() { int i, j, n, doc, ans[200]; //doc是逗号后面实际的位数 ch

求高精度幂(java)

求高精度幂 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 对数值很大.精度很高的数进行高精度计算是一类十分常见的问题.比如,对国债进行计算就是属于这类问题. 现在要你解决的问题是:对一个实数R( 0.0 < R < 99.999 ),要求写程序精确计算 R 的 n 次方(Rn),其中n 是整数并且 0 < =n <= 25. 输入 输入有多行,每行有两个数R和n,空格分开.R的数字位数不超过10位. 输出 对于每组输入,要求输出一行,该行包含精确的

北京大学Online Judge 之 “求高精度幂(ID1001)”解题报告

北京大学Online Judge 之 "求高精度幂(ID1001)"解题报告 巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo) 题目描述: Description 对数值很大.精度很高的数进行高精度计算是一类十分常见的问题.比如,对国债进行计算就是属于这类问题. 现在要你解决的问题是:对一个实数R( 0.0 < R <99.999 ),要求写程序精确计算 R 的 n 次方(Rn),其中n 是整数并且 0 < n <

求高精度幂

求高精度幂 时间限制:3000 ms  |           内存限制:65535 KB 难度:2 描述 对数值很大.精度很高的数进行高精度计算是一类十分常见的问题.比如,对国债进行计算就是属于这类问题. 现在要你解决的问题是:对一个实数R( 0.0< R < 99.999 ),要求写程序精确计算 R的 n次方(Rn),其中n是整数并且 0 < =n< = 25. 输入 输入有多行,每行有两个数R和n,空格分开.R的数字位数不超过10位. 输出 对于每组输入,要求输出一行,该行包

Poj.Grids 2951 浮点数求高精度幂

2951:浮点数求高精度幂 总时间限制: 1000ms 内存限制: 65536kB 描述 有一个实数 R ( 0.0 < R < 99.999 ) ,要求写程序精确计算 R 的 n 次方.n 是整数并且 0 < n <= 25. 输入 T输入包括多组 R 和 n. R 的值占第 1 到 第 6 列,  n 的值占第 8 和第 9 列. 输出 对于每组输入,要求输出一行,该行包含精确的 R 的 n 次方.输出需要去掉前导的 0 后后面不不要的 0 .如果输出是整数,不要输出小数点.

POJ-1001 求高精度幂

[题目描述] 给定R与n,求Rn的精确值,其中(0.0<R<99.99, n为整数0<n<=25). [思路分析] 1. 存储结构 由于R最大不超过100,n不会超过25,故Rn不会超过50位,保险起见采用100位的int数组.数组采用与字符串的逆序方式存储,即str=”123456”中str[0]=’1’而存入int数组后,int[0]=’6’.因此,在输入时候,可以通过字符串的字符个数以及是否存在小数点来判断这个数字的位数,根据位数从最高位(str[0])开始存储数字.这样虽然

POJ 1001 Exponentiation 求高精度幂

Exponentiation Time Limit: 500MS   Memory Limit: 10000K Total Submissions: 147507   Accepted: 36006 Description Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of the n

求高精度幂数

求高精度幂数 个人信息:就读于燕大本科软件工程专业 目前大三; 本人博客:google搜索"cqs_2012"即可; 个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献; 编程语言:C++ ; 编程坏境:Windows 7 专业版 x64; 编程工具:vs2008; 制图工具:office 2010 powerpoint; 硬件信息:7G-3 笔记本; 真言 去往火焰山,炼就红色眼 题目 百炼 1001 幂运算 网址 http://bailian.openjudge

NYOJ 90 —— 求n划分为若干个正整数的划分个数

整数划分 时间限制:3000 ms  |  内存限制:65535 KB 描述 将正整数n表示成一系列正整数之和:n=n1+n2+…+nk, 其中n1≥n2≥…≥nk≥1,k≥1. 正整数n的这种表示称为正整数n的划分.求正整数n的不 同划分个数. 例如正整数6有如下11种不同的划分: 6: 5+1: 4+2,4+1+1: 3+3,3+2+1,3+1+1+1: 2+2+2,2+2+1+1,2+1+1+1+1: 1+1+1+1+1+1.  输入 第一行是测试数据的数目M(1<=M<=10).以下每