Precision power (高精度幂运算)(相乘的变体)
来源:互联网 发布:数据库怎么设计 编辑:程序博客网 时间:2024/04/29 08:42
POJ 1001 http://poj.org/problem?id=1001
//注意存储方式是从后往前存储的 也就是逆序存储的#include<iostream>using namespace std;char str[10];int n, dot;int res[200], a[200], b[200];//a记录的是相乘之后的数int len, lena, lenb;//lena、lenb分别记录a,b的长度void mul(){int i,j;memset(res, 0, sizeof(res));for(i=1; i<=lena; i++) {for(j=1; j<=lenb; j++){res[i+j-1]=res[i+j-1]+a[i]*b[j];if (res[i+j-1]>9){res[i+j] =res[i+j]+res[i+j-1]/10;res[i+j-1]%=10;}}}if (res[lena+lenb-1]>9) //最高位的处理 {res[lena+lenb] = res[lena+lenb-1] / 10; //res[lena+lenb] + res[lena+lenb-1] = res[lena+lenb-1] % 10;}lena = lena + lenb;for (i=1; i<=lena; i++) //将结果值重新放在a里a[i] = res[i];}int main(){int i,j,up,down;while (scanf("%s %d", str, &n)!=EOF){dot = -1;for (i=5, j=1; i>=0; i--){if (str[i]!='.'){a[j]=b[j]=str[i]-'0'; j++;}elsedot = i;}if(dot==-1) //如果没有小数,就有六位;否则,是五位lena=lenb=6;elselena=lenb=5;for (i=1; i<n; i++)mul();if (dot==-1) //如果没有小数直接输出{for (i=lena; i>=1; i--)printf("%d", a[i]);printf("\n");}else//在此处处理小数的时候,对于那些在不计小数相乘后的结果前后有出现零的先处理零,将前后的零全部去掉,//然后再查看小数位置,调整输出的起始地址{dot=5-dot;//第几位是小数dot=dot*n;for (i=1; i<=lena; i++)//消除小数后的没有实际含义的零{if (a[i]!=0){down=i;//记录小数后面第一个不为零的位置break;}}for (j=lena; j>=1; j--)//消除正式前的没有实际含义的零{if (a[j]!=0){up = j;//记录整数后面第一个不为零的位置break;}}i=up;if (up<dot)//整数前需补零i = dot;j=down;if (j>dot) //应对那些10.000这样j = dot + 1;for (; i>=j; i--){if (i==dot)printf(".");printf("%d", a[i]);}printf("\n");}}return 0;}
0 0
- Precision power (高精度幂运算)(相乘的变体)
- 大数相乘(高精度)
- 高精度运算 51 nod 大数相乘
- Power of Cryptography(高精度)
- Problem 16 Power digit sum (高精度幂)
- 高精度乘法运算的实现(不完全)
- 两个大数相乘、精度很高的小数相乘(小数点后位数没有限制,请写一个高精度算法)
- 【总结】高精度计算(Arbitrary-precision arithmetic)的模板 CPP Language
- 高精度幂运算(java大数)
- poj1001Exponentiation高精度幂运算
- 高精度求幂运算
- 高精度运算(转)
- 大数(高精度)运算
- 高精度计算(二) /*高精度的加法运算*/
- 稀疏矩阵的运算(相乘,输出,转置,相加)
- 高精度乘法,大数相乘
- 高精度总结(高精度类和重载运算高精度阶乘)
- 高精度大数运算的实现
- Jump Game
- 通过Sqoop实现Mysql / Oracle 与HDFS / Hbase互导数据
- android的文件操作。(未整理完成)
- OS—操作系统
- Java项目(2)——Java开发环境配置|JDK与JRE
- Precision power (高精度幂运算)(相乘的变体)
- hdoj 1084 What Is Your Grade?
- 冒泡排序总结
- 黑马程序员——OC语言初学
- Ubuntu下安装minitools+minitools烧写linux到开发板
- C++访问控制和继承关系
- 预编译宏
- Linux正确关机
- HDU-#5038 Grade(模拟+Hash)