POJ1001 Exponentiation,高精度乘法

#include<stdio.h>
#define N 150

char s[6];
char r[6];
char n;
char decimal = 0;

char result[N] = {0};
char temp[N] = {0};

void initArray(char* a, int n)
{
int i;
for(i=0; i<n; i++)
{
a[i] = 0;
}
}

void copy(char* src, char* dest, int start, int end)
{
int i;
for(i=start; i<=end; i++)
{
dest[i] = src[i];
}
}

int findLastIndex(char* a)
{
int i=N-1;
for(; i>=0 && a[i]==0; i--);
return i;
}

{
int i;
int c=0;
for(i=0; i<N; i++)
{
a[i] += c;
c = a[i]/10;
a[i] = a[i]%10;
}
}

void transformR()
{
decimal = 0;
char foundDec = 0;
int i,j;

initArray(r, 6);

//转换R
for(i=5,j=0; i>=0; i--)
{
if(s[i] != '.')
{
r[j++] = s[i]-'0';
if(!foundDec)
{
decimal++;
}
}
else if(s[i] == '.')
{
foundDec = 1;
}
}
if(!foundDec)
{
decimal = 0;
}
}

void printArr(char* a, int end, int start)
{
int i;
for(i=end; i>=start; i--)
{
printf("%d", a[i]);
}
}

void print(char* a)
{
int i;
int start,end;
end = findLastIndex(a);
decimal = decimal*n;
if(decimal==0)
{
printArr(a, end, 0);
printf("\n");
}
else
{
for(i=0; i<N && a[i]==0; i++);
start = i;
if(decimal <= start)
{
printArr(a, end, decimal);
printf("\n");
}
else if(decimal > start && decimal<=end)
{
printArr(a, end, decimal);
printf(".");
printArr(a, decimal-1, start);
printf("\n");
}
else
{
printf(".");
printArr(a, decimal-1, start);
printf("\n");
}
}

}

void compute()
{
int i,j,k;
int lastI;
initArray(temp, N);
initArray(result, N);

for(i=0; i<6; i++)
{
result[i] = r[i];
}
//计算
for(i=1; i<n; i++)
{

lastI = findLastIndex(result);
for(j=0; j<6; j++)
{
if(r[j] != 0)
{
for(k=0; k<=lastI; k++)
{
temp[j+k] += r[j]*result[k];
}
}
}
copy(temp, result, 0, N-1);
initArray(temp, N);
}
}

int main()
{
while(scanf("%s%d", s, &n) !=EOF)
{
transformR();
compute();
print(result);
}

return 0;
}


• 本文已收录于以下专栏：

POJ1001 Exponentiation 高精度乘法

• Human_CK
• 2011年07月21日 22:48
• 518

[POJ][1001]Exponentiation

Description Problems involving the computation of exact values of very large magnitude and precision...
• oqqShaw123
• 2013年10月04日 11:18
• 4043

poj1001解题报告+测试数据

• keysona
• 2015年06月05日 08:55
• 856

POJ 1001 Exponentiation 无限大数的指数乘法 题解

POJ做的很好，本题就是要求一个无限位大的指数乘法结果。 要求基础：无限大数位相乘 额外要求：处理特殊情况的能力 -- 关键是考这个能力了。 所以本题的用例特别重要，再聪明的人也会疏忽某些用例的。 本...
• kenden23
• 2014年04月18日 10:20
• 4716

高精度乘法计算 poj1001 Exponentiation C代码

• Lorain_Lynies
• 2016年07月18日 21:36
• 282

【poj1001】 Exponentiation

http://poj.org/problem?id=1001 (题目链接)题意：求实数R的n次方，要求高精度。Solution 　　SB题Wa了一下午，直接蒯题解。 　　高精度，小数点以及去前导后...
• MashiroSky
• 2016年08月05日 16:44
• 146

POJ1001:Exponentiation

Time Limit:500ms Memory Limit:10000KDescriptionProblems involving the computation of exact values of...
• utimes
• 2016年05月10日 08:42
• 2542

POJ1001 高精度乘法

http://blog.csdn.net/alongela/article/details/6788237http://blog.csdn.net/alongela/article/details/6...
• IT_boy_Jason
• 2016年02月03日 18:18
• 108

POJ1001 Exponentiation

/* 高精度乘法（大整数乘法） */ #include #include int sum[1024],n; char num[8]; int main() { while(~scanf("%s%...
• Time_Limit_Exceeded
• 2014年07月01日 16:23
• 243

poj1001高精度乘法

1.题目 问题简述： 对一个实数R( 0.0 n)，其中n 是整数并且 0 输入要求： 输入包括多组 R 和 n。 R 的值占第 1 到第 6 列，n 的值占第 8 和第 9 列。 输出要求...
• dannis_bh
• 2016年03月23日 21:25
• 272

举报原因： 您举报文章：POJ1001 Exponentiation,高精度乘法 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)