poj 1001 大数

来源:互联网 发布:origins蘑菇水 知乎 编辑:程序博客网 时间:2024/05/15 06:22

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