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

上班无聊之际就聊聊杭电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个数是长度相等的。亏我还去天真的加了这个不相等的相加,总之坑之又坑。。
最后如果有说错的欢迎指出来,希望大家别踩坑。同时好好上班

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值