加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

poj 1001 大数

发布时间:2020-12-14 03:52:14 所属栏目:大数据 来源:网络整理
导读:坑 不读说。。。上代码。。。。poj的discus上有测试。。。。慢慢测就是了。。。 AC代码如下: #include iostream#include cstdio#include cstring#include algorithmusing namespace std;int num[10000];char R[20];int N,point,A;void init(){int last = st

坑 不读说。。。上代码。。。。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,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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读