POJ 1001 Exponentiation

已经找到错误:10 100 330 这样10的倍数转换的不对

# include <stdio.h>
# include <string.h>


int main()
{
int d, n, e, ans[150];
int i, j, tmp, c;
char b[6];

// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);

while (scanf("%s%d", b, &e) != EOF)
{
n = 0;
d = 1;

for (i = 0; b[i] != '\0'; ++i)
if (b[i] != '.')
{
n += (b[i]-'0');
n *= 10;
}
else d = 6 - i;
while (d!=0 && n%10==0)
{
n /= 10;
--d;
}

// printf("%d %d\n", n, d);

memset(ans, 0, sizeof(ans));

for (ans[0]=1, i=0; i < e; ++i)
for (c=0, j=0; j < 150; ++j)
{
tmp = n*ans[j] + c;
ans[j] = tmp % 10;
c = tmp / 10;
}

i = 149;
d = e * d;
while (!ans[i] && i>=d) --i;
for (; i >= d; --i) printf("%d", ans[i]);
if (d != 0)
for (printf("."); i >=0 ; --i)
printf("%d", ans[i]);
printf("\n");
}

return 0;
}

泪奔啊,各种严酷的测试都试了 可就是WA啊

谁有数据可以试试,帮忙找一下哪里错了,小弟在这里谢谢各位大牛了!

# include <stdio.h>
# include <string.h>


int main()
{
int d, n, e, ans[150];
int i, j, tmp, c;
char b[6];

// freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);

while (scanf("%s%d", b, &e) != EOF)
{
n = 0;
d = 1;

for (i = 0; b[i] != '\0'; ++i)
if (b[i] != '.')
{
n += (b[i]-'0');
n *= 10;
}
else d = 6 - i;
while (n%10 == 0)
{
n /= 10;
--d;
}
//printf("%d %d\n", n, d);

memset(ans, 0, sizeof(ans));

for (ans[0]=1, i=0; i < e; ++i)
for (c=0, j=0; j < 150; ++j)
{
tmp = n*ans[j] + c;
ans[j] = tmp % 10;
c = tmp / 10;
}

i = 149;
d = e * d;
while (!ans[i] && i>=d) --i;
for (; i >= d; --i) printf("%d", ans[i]);
if (d != 0)
for (printf("."); i >=0 ; --i)
printf("%d", ans[i]);
printf("\n");
}

return 0;
}



原文地址:https://www.cnblogs.com/JMDWQ/p/2360995.html