您的位置:首页 > 其它

上班无聊之际就聊聊杭电ACM1002题吧

2016-11-18 16:27 369 查看

上班无聊之际就聊聊杭电ACM1002题吧

杭电acm不但对提交的输出格式有严格的要求,而且对代码本身也有要求毕竟我们自己写代码的时候的编译器和它内部的不一定一样是不是。所以就导致了一系列的坑爹事件,先不说太多上代码。

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

char lastnum[1000]={0};
char returnchar[1002] = {0},modifychar[1002] = {0};
char num1[1000] = {0},num2[1000] = {0};

int allleng = 0;

//倒置字符串
char * ChangeCharLastNum()
{

int i = 0,lasti = allleng - 1,modify = 0,isFirst = 0;
for(; i < allleng; i ++)
{
returnchar[i] = lastnum[lasti --];
}
returnchar[i] = '\0';
return returnchar;
}

void CurCharTwoNum(char * num1, char * num2)
{
int length1 = strlen(num1) - 1;
int length2 = strlen(num2) - 1;
char centernum;
int jinwei = 0;
int curnum = length1 > length2 ? length1 : length2, i = 0;
allleng = 0;
while(1)
{
if(length1 == -1 && length2 != -1)
{
//相加加上进位
centernum = num2[length2];
length2 --;
}
else if(length2 == -1 && length1 != -1)
{
centernum = num1[length1];
length1 --;
}
else if(length2 == -1 && length1 == -1)
{
if(jinwei == 1)
{
lastnum[i++] = '1';
allleng ++;
}
lastnum[i] = '\0';
break;
}
else
{
centernum = num1[length1] + (num2[length2] - '0');
length2 --;
length1 --;
}
centernum += jinwei == 1 ? 1 : 0;
//检测是否产生进位
if(centernum - '0' > 9)
{
lastnum[i]  = (centernum - '0') % 10 + '0';
jinwei = 1;
}
else
{
lastnum[i]  = centernum;
jinwei = 0;
}
i ++;
//检测字符串的长度
allleng ++;
}
}

int main()
{
int curnum = 0,i = 0;
scanf("%d", &curnum);
for(i = 0;i < curnum;i ++)
{
scanf("%s%s", num1,num2);
CurCharTwoNum(num1, num2);
printf("Case %d:\n",i + 1);
if(i != curnum - 1)
printf("%s + %s = %s\n\n", num1, num2, ChangeCharLastNum());
else
printf("%s + %s = %s\n", num1, num2, ChangeCharLastNum());
}
return 0;
}


这个是我修改过好几个版本之后的代码其实一开始输出就是对的 但是问题一直出在代码本身上,比如

char lastnum[1000]={0};
char returnchar[1002] = {0},modifychar[1002] = {0};
char num1[1000] = {0},num2[1000] = {0};


这些声明一开始是放在局部变量中然后通过函数来返回地址,本地编译器都是没有任何问题的输出格式也全部都是对的但是就是怎么都是AC不了一直都是Wrong Answer。经过双目扫描n久之后才发现下面编译器爆了一个警告。就尝试的修改了结果就他妈的AC了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

而且它这题根本就没有考虑要相加的2个数的长度也就是是题目默认这2个数是长度相等的。亏我还去天真的加了这个不相等的相加,总之坑之又坑。。

最后如果有说错的欢迎指出来,希望大家别踩坑。同时好好上班
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  杭电ACM-1002 ACM