您的位置:首页 > 其它

Hdu 1063 Exponentiation

2012-07-13 11:04 295 查看
模拟高精度题。这题也真是。。。无语了。

CODE:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
#define END -1
const int maxn = 1001;
int BigNumber[maxn] = {0};

void multiple(int a[], int n) //大整数相乘
{
int i, j;
int c = 0; //进位
for(i = 1; i <= a[0]; i++)
{
a[i] = a[i]*n + c;
c = a[i]/10;
a[i] %= 10;
}
while(c)
{
a[i++] = c%10;
c /= 10;
}
a[0] = i-1;
return ;
}

void output(int pos)
{
int i, j;
if(BigNumber[0] > pos) //有整数
{
for(j = 0, i = BigNumber[0]; j < BigNumber[0] - pos ; j++, i--) //输出小数点前的数字
{
printf("%d", BigNumber[i]);
}
for(j = 1 ; BigNumber[j] == 0; j++) BigNumber[j] = END; // 去零
if(BigNumber[i] == END || i == 0) return; //整数的话
printf(".");
for(; BigNumber[i] != END && i >= 1 ; i--) //输出小数点后的数字
printf("%d", BigNumber[i]);
}
else //无整数
{
printf(".");
for(i = 0 ; i < pos - BigNumber[0]; i++)
printf("0");
for(j = 1; BigNumber[j] == 0; j++) BigNumber[j] = END; //去零
for(i = BigNumber[0]; BigNumber[i] != END && i >= 1; i--)
printf("%d", BigNumber[i]);
}
return ;
}

int main()
{
char s[10];
int n;
int pos, num;
while(~scanf("%s%d", s, &n))
{
int i, j;
int l = strlen(s);
num = 0;
memset(BigNumber, 0 ,sizeof(BigNumber));
for(i = 0, pos = 5; i < l ; i++) //pos = 5,万一没有小数点,则pos = 5;
{
if(s[i] == '.') pos = i;
else num = num*10 + s[i]-'0'; //将小数转换为整数。
}
BigNumber[0] = BigNumber[1] = 1;
pos = (5-pos)*n; //一共有几位小数
while(n--)
{
multiple(BigNumber, num); //大数相乘
}
output(pos); //输出
printf("\n");
}
return 0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: