已经找到错误: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;
}