Hdu 1063 Exponentiation

模拟高精度题。这题也真是。。。无语了。

CODE:

#include <stdio.h>
#include <stdlib.h>
#include < string.h>
using  namespace std;
#define END -1
const  int maxn =  1001;
int BigNumber[maxn] = { 0};

void multiple( int a[],  int n)          // 大整数相乘 
{
     int i, j;
     int c =  0// 进位 
     for(i =  1; i <= a[ 0]; i++)
    {
        a[i] = a[i]*n + c;
        c = a[i]/ 10;
        a[i] %=  10;
    }
     while(c)
    {
        a[i++] = c% 10;
        c /=  10;
    }
    a[ 0] = i- 1;
     return ;
}


void output( int pos)
{
     int i, j;
     if(BigNumber[ 0] > pos)          // 有整数 
    {
         for(j =  0, i = BigNumber[ 0]; j < BigNumber[ 0] - pos ; j++, i--)          // 输出小数点前的数字 
        {
            printf( " %d ", BigNumber[i]);
        }
         for(j =  1 ; BigNumber[j] ==  0; j++) BigNumber[j] = END;   //     去零 
         if(BigNumber[i] == END || i ==  0return;        // 整数的话 
            printf( " . ");
         for(; BigNumber[i] != END && i >=  1 ; i--)             // 输出小数点后的数字 
         printf( " %d ", BigNumber[i]);
    }
     else          // 无整数 
    {
        printf( " . ");
         for(i =  0 ; i < pos - BigNumber[ 0]; i++)                 
            printf( " 0 ");
         for(j =  1; BigNumber[j] ==  0; j++) BigNumber[j] = END;     // 去零 
          for(i = BigNumber[ 0]; BigNumber[i] != END && i >=  1; i--)      
           printf( " %d ", BigNumber[i]);
    }
     return ;
}


int main()
{
     char s[ 10];
     int n;
     int pos, num;
     while(~scanf( " %s%d ", s, &n))
    {
         int i, j;
         int l = strlen(s);
        num =  0;
        memset(BigNumber,  0 , sizeof(BigNumber));
         for(i =  0, pos =  5; i < l ; i++)                   // pos = 5,万一没有小数点,则pos = 5;
        {
             if(s[i] ==  ' . ') pos = i;
             else num = num* 10 + s[i]- ' 0 ';              // 将小数转换为整数。 
        }
        BigNumber[ 0] = BigNumber[ 1] =  1;
        pos = ( 5-pos)*n;                       // 一共有几位小数 
         while(n--)
        {
            multiple(BigNumber, num);        // 大数相乘 
        }
        output(pos);        // 输出 
        printf( " \n ");
    }
     return  0;

} 

你可能感兴趣的:(exp)