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是逗号后面实际的位数
	char s[20];
	while( scanf( "%s %d", s, &n ) == 2 ){
		if( n == 0 ){
			printf( "1\n" );
			continue;
		}
		memset( ans, 0, sizeof(ans) );
		int len = strlen(s);
		int real = 0;//是去掉小数点之后的实际整数
		int flag1 = 1;//标记前面不是0的数
		int flag = 0; //标记逗号出现
		doc = 0;
		int k = 0;
		int sum = 0; //sum是小数点后面没有作用的0的个数
		for( i = 0; i < len; i ++ )
		if( s[i] == '.'){
			flag = 1;
			break;
		}
		if( flag ){ //如果有逗号
		for( i = len-1; i >= 0; i -- ){
			if( s[i] == '0'&&flag1 ){
			 ++sum;
			 continue;
			}
			else{
				flag1 = 0;
				if( s[i] == '.' ){
					flag1 = 0;
					doc = len-i-sum-1;
					continue;
				}
			}
			ans[k++] = s[i]-'0';
		}
		}
		else{ //如果没逗号
			for( i = len-1; i >= 0; i -- ){
				ans[k++] = s[i]-'0';
			}
		}
		for( i = k-1; i >=0; i -- )
		real = real*10+ans[i];
		for( i = 1; i < n; i ++ ){
			int c = 0;
			for( j = 0; j < 199; j ++ ){
				int s = ans[j]*real+c;
				ans[j] = s%10;
				c = s/10;
			}
		}
		for( i = 199; ans[i]==0&&i>=n*doc; i -- );
		for( j = i; j >= 0; j -- ){
			if( j == n*doc-1 )
			printf( "." );
			printf( "%d", ans[j] );
		}
		 printf( "\n" );
	}
	return 0;
}         

nyoj 155 求高精度幂 【大数】

时间: 2024-08-27 09:42:20

nyoj 155 求高精度幂 【大数】的相关文章

NYOJ 155 求高精度幂

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

求高精度幂(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

北大OJ_1001题:求正数的高精度幂

程序说明 程序效率不高,时间复杂度为O(n^2),有待进一步的优化,呵呵 程序代码 #include <iostream> #include <string> #include <vector> using namespace std; //求两个大数的乘积(两数均为正数) string GetProductOfTwoBigNum( string strNumLeft, string strNumRight ) { ///////////////////////////

求高精度幂数

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