POJ 1001
来源:互联网 发布:mac如何打开jar文件 编辑:程序博客网 时间:2024/06/05 01:05
#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 ;}