poj 1001 大数

坑 不读说。。。上代码。。。。poj的discus上有测试。。。。慢慢测就是了。。。

AC代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

int num[10000];
char R[20];
int N, point, A;

void init(){
	int last = strlen( R );
	while( last > 0 ){
		if( R[last-1] == '0' ){
			last--;
		}else{
			break;
		}
	}
	memset( num, 0, sizeof( num ) );
	A = 0;
	int i;
	for( i = 0; i < last && R[i] != '.' ; i++ ){
		A = A * 10 + R[i] - '0';
	}
	point = 0;
	if( i < last ){
		i++;
		while( i < last ){
			A = A * 10 + R[i++] - '0';
			point++;
		}
	}
	int temp = A;
	num[0] = 0;
	while( temp ){
		num[0]++;
		num[num[0]] = temp % 10;
		temp /= 10;
	}
}

void calc(){
	for( int i = 2; i <= N; i++ ){
		int mod = 0;
		for( int i = 1; i <= num[0]; i++ ){
			mod = mod + num[i] * A;
			num[i] = mod % 10;
			mod /= 10;
		}
		while( mod ){
			num[++num[0]] = mod % 10;
			mod /= 10;
		}
	}
}

void out(){
	if( num[0] <= point * N ){
		cout << '.';
		for( int i = point * N; i > num[0]; i-- ){
			cout << 0;
		}
		for( int i = num[0]; i >= 1; i-- ){
			cout << num[i];
		}
		cout << endl;
	}else{
		for( int i = num[0]; i > point * N; i-- ){
			cout << num[i];
		}
		if( point != 0 ){
			cout << '.';
			for( int i = point * N; i >= 1; i-- ){
				cout << num[i];
			}
		}
		cout << endl;
	}
}

int main(){
	while( scanf( "%s%d", R, &N ) != EOF ){
		if( N == 0 ){
			cout << 1 << endl;
			continue;
		}
		init();
		if( A == 0 ){
			cout << 0 << endl;
			break;
		}
		calc();
		out();
	}
	return 0;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值