【待解决】应该是指针出错,但找不到具体错在哪里

这期题目不重要,用python一下子就过了,但c里面却出现了一个我想不透的问题。


我觉得我已经解决了,其实不是指针问题,是处理完字符了忘了加'\0'导致溢出,但是我即使这样改了,自己编译器通过了,但牛客网上仍提示我案例“657 37”错了。。。我真是无语

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXDIGIT 10000

char *intToStr(int n)
{
    char rlt[MAXDIGIT];

    int len = 0;
    while(n)
    {
        rlt[len++] = '0' + n%10;
        n /= 10;
    }
    rlt[len] = '\0'; /**< 哈哈,根本不是什么指针问题。。。只是忘了加结束符,damn */
    return rlt;
}

int strToInt(char *p)
{
    int i;
    int rlt = 0;
    int carry = 1;
    for(i=strlen(p)-1; i>=0; i--)
    {
        rlt += (p[i] - '0')*carry;
        //printf("TEST:%d from %c\n", rlt, p[i]);
        carry *= 10;
    }
//    free(p);
//    p = NULL;
    return rlt;
}

int rev(int n)
{
    char *rlt;
    rlt = intToStr(n);
    //printf("str:%s with %d length @%p\n", rlt, strlen(rlt), *rlt);
    int ans = strToInt(rlt);
//    free(rlt);
//    rlt = NULL;
    return ans;
}

int main()
{
    int a, b;
    scanf("%d%d", &a, &b);
//    a = 956;
//    b = 37;
    int x = rev(a);
    int y = rev(b);
    printf("%d\n", rev(x + y));
    //printf("%d\n", y);

    system("pause");
}

题目描述

对于一个整数X,定义操作rev(X)为将X按数位翻转过来,并且去除掉前导0。例如:
如果 X = 123,则rev(X) = 321;
如果 X = 100,则rev(X) = 1.
现在给出整数x和y,要求rev(rev(x) + rev(y))为多少?

输入描述:

输入为一行,x、y(1 ≤ x、y ≤ 1000),以空格隔开。

输出描述:

输出rev(rev(x) + rev(y))的值
示例1

输入

123 100

输出

223

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXDIGIT 10000

char *intToStr(int n)
{
    char rlt[MAXDIGIT];
    int len = 0;
    while(n)
    {
        rlt[len++] = '0' + n%10;
        n /= 10;
    }
    return rlt;
}

int strToInt(char *p)
{
    int i;
    int rlt = 0;
    int carry = 1;
    for(i=strlen(p)-1; i>=0; i--)
    {
        rlt += (p[i] - '0')*carry;
        //printf("TEST:%d from %c\n", rlt, p[i]);
        carry *= 10;
    }
    free(p);
    p = NULL;
    return rlt;
}

int rev(int n)
{
    char *rlt;
    rlt = intToStr(n);
    printf("str:%s @%p\n", rlt, *rlt);
    int ans = strToInt(rlt);

    return ans;
}

int main()
{
    int a, b;
    //scanf("%d%d", &a, &b);
    a = 957;
    b = 37;
    int x = rev(a);
    int y = rev(b);
    //printf("%d, %d\n", x, y);
    printf("%d\n", y);

    system("pause");
}

例如,所用的测试例 957 和 37,用rev函数之后,957理应变成759,37理应变成73,但是!37居然是变成739,末位多了一个9,而且这个“9”其实就是759的最后一位那个“9”。

但是为什么会这样子了,上一次函数调用之后,为什么指针里面的内容还在??



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值