您的位置:首页 > 其它

UVA - 748 Exponentiation

2016-07-21 19:13 381 查看

UVA - 748 Exponentiation

题目大意:给一个6个位的字符串 和一个数N 求该字符串所表示的数子 的 N次方

解题思路:先忽略小数点直接读所有的数然后用高精乘的方法做就好了

/*************************************************************************
> File Name: UVA-748.cpp
> Author: Robin
> Mail: 499549060@qq.com
> Created Time: 2016年07月20日 星期三 09时14分12秒
************************************************************************/

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
int main() {
int a[100000];
int a1[100000];
int a2[100000];
char c[10];
int N;
int t;
int tt = 0;     while (scanf("%s%d", c, &N) != EOF) {
tt = 0;
memset(a, 0, sizeof(a));
memset(a1, 0, sizeof(a1));
memset(a2, 0, sizeof(a2));
for (int i = 5; i >= 0; i--) {
if (c[i] == '.') {
t = i;
continue;
}
a[tt] = c[i] - '0';
a2[tt] = c[i] - '0';
tt++;
}
int f = tt;
if( N > 1) {
for (int i = 1; i < N; i++) {
memset(a1, 0, sizeof(a1));
for (int j = 0; j < tt; j++) {
int s = 0;
for (int k = 0; k < f; k++) {
s = a1[j+k]  + a2[k]*a[j];
a1[j+k] = s%10;
a1[k+j+1] += s/10;
}
}
if (a1[tt+f-1] > 0) f = tt + f;
else f = f + tt - 1;
for (int j = 0; j < f; j++) {
a2[j] = a1[j];
}
}
int flag = 0;
for (int i = 0; i < f; i++) {
if (a1[i]) {
flag = i;
break;
}
}
for (int i = f - 1; i >= flag; i--) {

if ( a1[f-1] == 0 && i == f - 1) {
printf(".");
continue;
}
printf("%d", a1[i]);
if ( i == (6-t-1)*N) printf(".");
}
printf("\n");
}
if ( N == 1) printf("%s\n", c);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: