首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

POJ1001 总是RUNTime Error 在小弟我电脑上运行所有测试用例均通过并且没有出现运行时异常

2014-01-01 
POJ1001 总是RUNTime Error 在我电脑上运行所有测试用例均通过并且没有出现运行时错误各位请帮忙看一下,真

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, &times) != 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");去掉如何
[解决办法]

引用:
Quote: 引用:

是OJ平台不能通过吗,看看把system("pause");去掉如何

太感谢了 无语了 竟然真的是因为这个原因 谢谢了 马上结贴 

OJ平台检测比较严,这条语句,system(“pause”),测试平台是不认识的,它不会为你处理这条语句

热点排行