上班无聊之际就聊聊杭电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 A + B Problem II
- 杭电ACM 1002 大数相加
- 杭电ACM题1000-1002
- 杭电ACM 1002
- 杭电ACM--1002
- 杭电acm-1002题-大数加法
- 杭电ACM 1002 A + B Problem II
- 杭电acm1002 Sum Problem
- 杭电ACM 1002
- 杭电ACM 1002大数相加 两种方法
- 赛马网ACM试题(原杭电oj ACM)java版答案(1000,10001,1002)
- 杭电ACM-HDU1002-A+B ProblemII
- 杭电ACM1000,1001,1002 java解答
- 杭电ACM刷题(1):1002,A + B Problem II 标签: acmc语言 2017-05-07 15:35 139人阅读 评
- 杭电ACM(1002) -- A + B Problem II 大数相加 -提交通过
- 杭电ACM----------1002 A+B problemII
- 杭电ACM 1002
- 杭电ACM刷题(1):1002,A + B Problem II
- 杭电ACM---1002(大数)
- 杭电ACM 1002题