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 ;}