POJ 1001 Exponentiation (고정 밀 대수 곱셈)

2872 단어 알고리즘 문제
제목 링크:http://poj.org/problem?id=1001
제목: 소수 R 의 N 차 멱 구하 기
사고: 결과 디지털 문자열 의 길 이 는 최대 5 * 25 이 고 대수 템 플 릿 을 사용 하 는 것 을 고려 합 니 다.먼저 소 수 를 정수 로 바 꾸 고 출력 할 때 소수점 자릿수 를 고려한다.
코드:
#include 
#include 
#include 
#include 
#include 
#include 
typedef long long LL;
using namespace std;
const int INF=INT_MAX;
const int MAXN=5005;
const int mod=1e9+7;
const int N = 1e4 + 10;
const double eps=1e-9;
int n;
char ans[6000000];
double m;
struct BigInt
{
    const static int mod=10;
    const static int mlen=1;
    int a[600],len;
    BigInt(int v=0)
    {
        memset(a,0,sizeof(a));
        len=0;
        do
        {
            a[len++]=v%mod;
            v/=mod;
        }
        while(v);
    }
    BigInt(char s[])
    {
        memset(a,0,sizeof(a));
        int slen=strlen(s);
        len=(slen-1)/mlen+1;
        int index=0;
        for(int i=slen-1;i>=0;i-=mlen)
        {
            int t=0;
            int j=max(0,i-mlen+1);
            while(j<=i)
            {
                t=t*10+s[j]-'0';
                j++;
            }
            a[index++]=t;
        }
    }
    BigInt operator +(const BigInt &b)
    {
        BigInt ret;
        ret.len=max(len,b.len);
        memset(ret.a,0,sizeof(ret.a));
        for(int i=0;i0)ret.len++;
        return ret;
    }
    BigInt operator *(const BigInt &b)
    {
        BigInt ret;
        ret.len=len+b.len;
        memset(ret.a,0,sizeof(ret.a));
        for(int i=0;i1)ret.len--;
        return ret;
    }
    void print()
    {
        printf("%d",a[len-1]);
        for(int i=len-2;i>=0;i--)
                printf("%d",a[i]);
    }
    void print2(int decn)
    {
        if(len=0;i--)
                printf("%d",a[i]);
        }
        else if(decn==0)
        {
            for(int i=len-1;i>=0;i--)
                printf("%d",a[i]);
        }
        else
        {
            for(int i=len-1;i>=decn;i--)
                printf("%d",a[i]);
            printf(".");
            for(int i=decn-1;i>=0;i--)
                printf("%d",a[i]);
        }
    }
};
int main()
{
    //freopen("in.txt","r",stdin);
    while(scanf("%lf%d",&m,&n)!=EOF)
    {
        int ten=1;
        int cnt=0;
        while(1)
        {
            double now=m*ten;
            if(now-floor(now)

좋은 웹페이지 즐겨찾기