POJ 1001 求高精度幂 实在不知道哪里错了

jiangzhoufafa 2016-04-12 10:11:25
以下是我的代码,感觉能输出的情况都考虑到了,到底是哪里错了呢?
#include<stdio.h>
#include<string.h>
#include<cmath>

using namespace std;

int main() {
int a[1000], b[1000], c[1000], n, weishu, lena, lenb, temp, countzero;
char m[10000];
bool isdot;
while(scanf("%s %d", &m ,&n)!=EOF) {
isdot = false;
for(int i=0;i<1000;i++)
b[i] = 0;
lena = 0;
lenb = 0;
countzero = 0;
if(m[0]=='0') {
isdot=true;
for(int i=2, j=0;i<strlen(m)&&j<strlen(m);i++,j++) {
a[j] = m[i] - '0';
lena++;
if(a[j]==0)
countzero++;
else
countzero = 0;
b[j] = m[i] - '0';
}
lena -= countzero;
lenb = lena;
weishu = lena;
}
else {
for(int i=0, j=0;i<strlen(m)&&j<strlen(m);i++,j++) {
if(m[i]=='.') {
weishu = strlen(m) - i - 1;
j--;
isdot = true;
continue;
}
a[j] = m[i] - '0';
lena++;
if(a[j]==0)
countzero++;
else
countzero = 0;
b[j] = m[i] - '0';
}
if(isdot) {
lena -= countzero;
lenb = lena;
weishu -= countzero;
}
else
lenb = lena;
}
for(int i=0;i<n-1;i++) {
for(int j=0;j<lena;j++)
for(int k=0;k<lenb;k++)
c[j+k]+=a[j]*b[k];
for(int j=lena+lenb-2;j>=0;j--) {
temp = c[j] / 10;
if (j!=0) {
b[j] = c[j] % 10;
c[j-1] += temp;
}
else
b[j] = c[j];
c[j] = 0;
}
lenb = lena + lenb - 1;
if(b[0]>9) {
for(int j=lena+lenb-1;j>1;j--)
b[j] = b[j-1];
b[1] = b[0] % 10;
b[0] /= 10;
lenb++;
}
}
if(!isdot) {
for(int i=0;i<lenb;i++)
printf("%d", b[i]);
printf("\n");
}
else {
if(weishu*n>lenb) {
printf(".");
for(int i=0;i<weishu*n-lenb;i++)
printf("0");
for(int i=0;i<lenb;i++)
printf("%d", b[i]);
printf("\n");
}
else if (weishu*n==lenb) {
printf(".");
for(int i=0;i<lenb;i++)
printf("%d", b[i]);
printf("\n");
}
else {
for(int i=0;i<lenb-weishu*n;i++)
printf("%d", b[i]);
printf(".");
for(int i=lenb-weishu*n;i<lenb;i++)
printf("%d", b[i]);
printf("\n");
}
}
}
return 0;
}
...全文
36 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧