POJ1001 总是RUNTime Error 在我电脑上运行所有测试用例均通过并且没有出现运行时错误
各位请帮忙看一下,真搞不清是什么原因了
使用的gcc版本是4.7 代码如下
代码在我这边运行是没有问题的 代码也仔细检查了很多遍 并且网上关于该题的测试用例也都全部通过了
实在是没检查出为什么会出现Runtime Error的原因
代码如下
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void point_deal(char* num, char* p, int* pos)
{
if (p == NULL)
{
*pos = 0;
return;
}
*pos = strlen(num) - 1 - (p - num);
strcpy(p, p+1);
}
void del_point(char* num1, char* num2, int* pos1, int* pos2)
{
char* p1 = strchr(num1, '.');
char* p2 = strchr(num2, '.');
point_deal(num1, p1, pos1);
point_deal(num2, p2, pos2);
}
void multiplication(char* num1, char* num2)
{
int pos1 = 0, pos2 = 0;
del_point(num1, num2, &pos1, &pos2);
int len1 = strlen(num1);
int len2 = strlen(num2);
int result[400] = {0};
int i = len1 - 1, j = len2 - 1;
for (; i >= 0; --i)
{
for (j = len2 - 1; j >= 0; --j)
{
result[i+j+1] += (num1[i] - 48) * (num2[j] - 48);
}
}
int len = strlen(num1) + strlen(num2);
int ilen = len - pos1 - pos2;
for (i = len - 1; i > 0; --i)
{
result[i-1] += result[i] / 10;
result[i] = result[i] % 10;
}
int k = 0;
if (result[0] != 0)
{
num2[k++] = (char)(result[0] + '0');
}
for (i = 1; i < ilen; ++i)
{
num2[k++] = (char)(result[i] + '0');
}
if (pos1 != 0 || pos2 != 0)
{
num2[k++] = '.';
for (i = ilen; i < len; ++i)
{
num2[k++] = (char)(result[i] + '0');
}
}
num2[k] = '\0';
}
void trim_head_zero(char* result)
{
int i = 0;
int pos = 0;
int len = strlen(result);
for (; i < len; ++i)
{
if ((result[i] >= '1' && result[i] <= '9') || result[i] == '.')
{
break;
}
else
{
++pos;
}
}
for (i = pos; i < len; ++i)
{
result[i - pos] = result[i];
}
result[len - pos] = '\0';
}
void trim_tail_zero(char* result)
{
int i = strlen(result) - 1;
char* p = strchr(result, '.');
if (p != NULL)
{
for (; i >= 0; --i)
{
if (result[i] == '0')
{
result[i] = '\0';
}
else
{
if (result[i] == '.')
{
result[i] = '\0';
}
break;
}
}
}
}
void print_result(char* result)
{
trim_head_zero(result);
trim_tail_zero(result);
if (strcmp(result, "") == 0)
{
strcpy(result, "0");
}
printf("%s\n", result);
}
int main(void)
{
char num1[400], num[400];
int times = 0;
while (scanf("%s%d", num1, ×) != EOF)
{
strcpy(num, num1);
int i = 1;
char num2[400];
strcpy(num2, num1);
if (times == 0)
{
strcpy(num2, "1");
}
for (; i < times; ++i)
{
multiplication(num1, num2);
strcpy(num1, num);
}
print_result(num2);
}
printf("\n");
system("pause");
}
分享到:
[解决办法]
是OJ平台不能通过吗,看看把system("pause");去掉如何
[解决办法]