高精度问题 国债
来源:互联网 发布:360软件宝库下载 编辑:程序博客网 时间:2024/04/27 17:09
题目描述
计算国债对于计算机来说是一件很繁重的事情,该问题涉及到的精度很高,现需要你编写一个程序用来计算R的n次方,这里R是一个实数(0.0<R<99.999),而n是一个整数(n<=30)。
输入
第1行是测试数据的组数m,每组测试数据占1行,每行包括一对数R和n。
输出
对应每组测试数据输出一行结果,结果是R的n次的精确值,首尾无意义的零不要输出,如果是整数,不要输出小数点。
样例输入
295.123 1298.999 10
样例输出
548815620517731830194541.89902534341571597353596722186985272190429072743629540498.1075960194566517745610440100011
看见题目感觉很头大,因为这类高精度问题是前天才接触了大数加法,大数乘法就是今天的内容。
大数乘法的内容请看另一篇博文,转载大牛的http://blog.csdn.net/chhuach2005/article/details/21168179
#include<stdio.h>#include<string.h>void mult(int *p1,int *p2,int len1,int *len2 ){ int i,j,k,d,str[200]; memset(str,0,sizeof(str)); for (i=0;i<len1;i++ ) for (j=0;j<*len2;j++ ) str[i+j]+=p1[i]*p2[j]; //大数乘法 k=len1+(*len2); //结果可能最大位长 while(k>0&&str[k]==0) k--; k++; for(i=0,d=0;i<k;i++) //处理进位 { p2[i]=(str[i]+d)%10; d=(str[i]+d)/10; } if (d>0) //最高位进位 { p2[i]=d; k++; } *len2=k;}int main(){ char str_a[10],str_b[205]; int i,T,j,k,len_a,len_b,n,pot; int a[10],b[200]; scanf("%d",&T); while (T--) { scanf("%s%d",str_a,&n); len_a=strlen(str_a); k=len_a-1; while(k>=0&&str_a[k]!='.') //找出小数点位置 k--; if (k<0) //判断小数点是否存在 pot=0; else { j=len_a-1; while(j>0&&str_a[j]=='0') //去掉小数点尾部的0,使角标位于小数点尾部不等于0的地方 j--; len_a=j+1; str_a[len_a]= '\0'; pot=len_a-k-1; //小数点后的位数 } i=len_a-1; k=0; while(i>=0) { if(str_a[i]!='.') //将大数颠倒存入并且去掉小数点, a[k++]=str_a[i]-'0'; i--; } memset(b,0,sizeof(b)); len_a=len_b=k; for (i=0;i<len_a;i++) b[i]=a[i]; //使乘数相同 for (i=1;i<n;i++) mult(a,b,len_a,&len_b); //做n-1次相乘 k = pot*n; //小数点位置 n = len_b > k? len_b:k; for (j=0,i=n-1;i>=0;i--) //结果转为字符串 { if (i==k-1) str_b[j++]='.'; str_b[j++]=b[i]+'0'; } str_b[j]='\0'; printf("%s\n",str_b); //输出结果 } return 0;}代码思路来源:http://write.blog.csdn.net/postedit/56676154
0 0
- 高精度问题 国债
- 国债介绍
- 国债期货
- 高精度的精度问题
- 高精度问题分析
- 高精度正整数乘法问题
- A+B高精度问题
- 问题 D 高精度加法
- 高精度数据问题
- java做高精度问题
- java 处理高精度问题
- 高精度的问题
- 高精度之关于高精度的其他问题
- 国债净价交易
- 国债逆回购指南
- 国债和利率关系
- 高精度整数去位去最小问题
- 高精度整数去位去最小问题
- PAT 乙级 1037. 在霍格沃茨找零钱(20)Java版
- Android 基于线程池的网络请求框架
- JQuey学习笔记
- 我收藏的博客专辑
- 让 shell 显示当前 git 的分支名称
- 高精度问题 国债
- PAT 乙级 1037. 在霍格沃茨找零钱(20)Java版
- dubbo学习视频
- Android studio 问题集锦
- Oracle 实现多个存储过程顺序调用执行
- ubuntu安装llvm-3.8
- 梯度,方向导数,相关概念
- PAT 乙级 1036. 跟奥巴马一起编程(15) Java版
- 修改eclipse的背景颜色为黑色以及编辑区域的字体样式