PKU_1002 浮点数N次方的精确计算
来源:互联网 发布:windows to go win8.1 编辑:程序博客网 时间:2024/06/06 17:59
求浮点数的乘方, 比如R^n次方 PKU ACM 1001
Sample Input
95.123 120.4321 205.1234 156.7592 998.999 101.0100 12
Sample Output
548815620517731830194541.899025343415715973535967221869852721.0000000514855464107695612199451127676715483848176020072635120383542976301346240143992025569.92857370126648804114665499331870370751166629547672049395302429448126.76412102161816443020690903717327667290429072743629540498.1075960194566517745610440100011.126825030131969720661201
代码
- #include<stdio.h>
- #include<memory.h>
- #include<string.h>
- typedef struct
- {
- int digits[1000];
- int len; //长度
- int pos; //小数点位置
- }bigfloat;
- //打印一个bigfloat
- void print_bigfloat(bigfloat big)
- {
- int i=0;
- int j=0;
- while(big.digits[big.len-1-i]==0&&big.len-big.pos>i)
- i++;
- while(big.digits[j]==0&&j<big.pos)
- j++;
- for(;i<big.len-j;i++)
- {
- if(big.pos==big.len-i) putchar('.');
- printf("%d",big.digits[big.len-1-i]);
- }
- }
- //b*c
- bigfloat b_c( bigfloat b, bigfloat c )
- {
- int i,j;
- bigfloat res;
- memset(res.digits,0,sizeof(res.digits)); //置0
- res.pos=b.pos+c.pos; //处理小数点位
- res.len=b.len+c.len; //处理长度
- //计算一次
- for(i=0;i<b.len;i++)
- for(j=0;j<c.len;j++)
- res.digits[i+j]+=b.digits[i]*c.digits[j];
- //处理进位
- for (i=0;i<res.len;i++)
- if (res.digits[i]>9)
- {
- res.digits[i+1]+=res.digits[i]/10;
- res.digits[i]%=10;
- while (res.digits[res.len]) res.len++;
- }
- return res;
- }
- //求大数s的n次幂
- bigfloat bigpow(bigfloat s, int n )
- {
- bigfloat res;
- if(n==1) return s;
- if(n==2) return b_c(s,s);
- return b_c(s,bigpow(s,n-1));
- }
- //输入一个浮点型大数
- bigfloat get_one(char str[10])
- {
- int len_str;
- int len=0;
- int i;
- bigfloat one;
- memset(one.digits,0,sizeof(one.digits)); //置0
- one.len=0;
- one.pos=0;
- len_str=strlen(str);
- for(i=0;i<len_str;i++)
- {
- if(str[len_str-1-i]=='.') one.pos=i;
- else
- {
- one.digits[len]=str[len_str-1-i]-'0';
- len++;
- }
- }
- one.len=len;
- return one;
- }
- int main()
- {
- bigfloat s;
- char str[10];
- int n;
- while(scanf("%s %d",str,&n)!=EOF)
- {
- s=get_one(str);
- print_bigfloat(bigpow(s,n));
- putchar('/n');
- }
- return 0;
- }
- PKU_1002 浮点数N次方的精确计算
- 浮点数的n次方
- 浮点数的精确计算
- 浮点数精确计算
- JAVA精确的计算浮点数
- Java浮点数的精确计算
- 利用BigDecimal精确的计算浮点数
- 计算浮点数的精确结果
- 浮点数进行精确计算的问题
- python 浮点数的精确计算
- java练习 计算n位可被浮点数精确表示的小数
- 1009——精确计算2的N次方
- 计算一个数的n次方
- 计算一个数的N次方
- java 浮点数精确计算
- IOS 浮点数精确计算
- Javascript 浮点数精确计算
- POJ 1001 Exponentiation(浮点数的n次方)
- HOJ 2089 4th point
- url编码
- BinaryFormatter 的简单使用
- linux-C实现查看目录中所有文件
- C标准函数库
- PKU_1002 浮点数N次方的精确计算
- Redis安装和使用示例
- 微软公司等数据结构+算法面试100题-第1题
- linux 编译指定库、头文件的路径问题
- Mysql设置某字段唯一
- IE6和Firefox同时支持PNG透明图片的方法
- 第十三周上机任务项目2-二进制转换
- Unix操作系统优势所在
- Asp.Net超大文件上传