求助:北大ACM1001: Exponentiation为什么老是Wrong Answer?

#include<stdio.h>#include<string.h>#include<stdlib.h>char*multi(char*a,char*b){intla=... #include <stdio.h>
#include <string.h>
#include <stdlib.h>

char* multi(char* a, char* b){
int la = strlen(a);
int lb = strlen(b);
int lc = la+lb;
char* c = (char*)malloc(lc+2);
int i, j, k;
memset(c,0,lc+2);
for(i = lb-1;i >= 0; i--)
for(j = la-1, k = lc - (lb - i); j >= 0; j--,k--){
int tmp;
c[k] += (a[j]-'0') * (b[i]-'0');
tmp = c[k]/10;
if(tmp > 0){
c[k-1] +=tmp;
c[k] -=tmp*10;
}
}
for(i = 0; i < lc; i++)
c[i]+='0';
return c;
}

int main(void){
char s[7];
int n;
char* m, *e;
int lm,ls;
//FILE* f = fopen("test.txt","r");
while(scanf("%s%d",s,&n) != EOF){
//while(fscanf(f,"%s%d",s,&n) != EOF){
int dot = 0;
int i;
int lm;
if(n == 0){
printf("%d\n",1);
continue;
}
if(n == 1){
printf("%s\n",s);
continue;
}
ls = strlen(s);
while(s[dot] != '.'&& dot < ls)
dot++;
for(i = dot; i < ls; i++)
s[i] = s[i+1];
s[i] = '\0';
dot = ls - dot - 1;
dot *=n;
m = multi(s,s);
n--;
while(n > 1){
e = multi(m,s);
free(m);
m = e;
n--;
}
if(dot > 0){
lm = strlen(m);
i = lm;
while(dot>0){
m[i] = m[i-1];
i--;
dot--;
}
m[i] = '.';
i = lm;
while(m[i] == '0'){
m[i] = '\0';
i--;
}
if(m[i] == '.')
m[i] = '\0';
i = 0;
while(m[i] == '0')
i++;
e = m+i;
}
else{
while(m[i] == '0')
i++;
e = m+i;
}
printf("%s\n",e);
free(m);
}
return 0;
}
展开
 我来答
xx_lyq00
2014-10-31 · TA获得超过4138个赞
知道大有可为答主
回答量:1794
采纳率:88%
帮助的人:795万
展开全部
这道题很复杂。。不要太花心思了,没什么意义的。
看下discuss,试下特殊例子。比如
.001 10
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式