POJ 1001
2013-09-26 23:34
197 查看
#include <iostream> #include <string> using std::cin; using std::cout; using std::endl; using std::string; #define MAX 500 #include <stdio.h> #include <string.h> int a[500] , n , poi , t , b[500] , c[500] ; void format(string s)//转换字符串,同时记录小数点的位置 { int i , k = 0 ; size_t len = s.size() ; for( i = 0 ; i < len ; i++ ) { if(s[len-1-i]>='0'&&s[len-1-i]<='9') a[k++] = s[len-1-i]-'0' ; else if(s[len-1-i]=='.') poi = i ; } } int main() { //char str[20]; string str; int i , j , k , flag , num , p ; while((cin>>str>>t)) { memset(a,0,sizeof(a)) ;//三个都清零 memset(b,0,sizeof(b)) ; memset(c,0,sizeof(c)) ; poi = 0 ; format(str) ; for( i = 0 ; i < 6 ; i++ )//把b[]数组作为底数 b[i] = a[i] ; if(!t) cout<<1<<endl; else { for( i = 2 ; i <= t ; i++ ) { for( j = 0 ; j < 500 ; j++ ) {//每次开始高精度前把a[]数组置为c[]数组,然后a[]数组存储中间量 c[j] = a[j] ; } memset(a,0,sizeof(a)) ; for( j = 0 ; j < 6 ; j++ ) { for( k = 0 ; k < 490 ; k++ ) { a[k+j]+=c[k]*b[j] ; } } flag = 0 ; for( j = 0 ; j < 500 ; j++ ) {//得出当前次运算所得结果,统一处理进位 num = a[j]+flag ; a[j] = num%10 ; flag = num/10 ; } } p = poi*t ; for( i = 0 ; i < poi*t ; i++ )//确定是否有结尾的0,及其位置( { if(a[i]) { p = i ; break ; } } flag = 0 ; for( i = 499 ; i >= p ; i-- ) {//输出,没啥说的,flag放这更方便 if(i==poi*t-1&&!flag) { cout<<"."<<a[i]; flag =1 ; } else if(i==poi*t-1&&flag) cout<<"."<<a[i]; else if((!flag)&&a[i]) { flag = 1 ; cout<<a[i]; } else if(flag) cout<<a[i]; else if(i==p) cout<<a[i]; } cout<<endl; } } return 0 ; }
相关文章推荐
- POJ1001 高精度
- POJ 1001 Exponentiation (高精度/大数乘法)
- poj 1001
- POJ1001 Exponentiation
- POJ 1001 Exponentiation
- [POJ]1001 Exponentiation
- poj 1001 求教这道题答案为啥是一直是compile error
- poj1001
- hdu 1063&&poj 1001
- poj1001 Exponentiation
- poj 1001 Exponentiation 高精度乘方
- POJ 1001
- poj 1001 Exponentiation
- POJ 1001 Exponentiation (Java高精度)
- poj1001 学会使用BigDecimal:)
- poj 1001 java
- POJ 1001
- POJ 1001 Exponentiation
- poj 1001 Exponentiation 高精度乘法
- poj 1001 Exponentiation