我的功能在调试时效果很好,但不是主要的

My function works good on debug, but not im main

我必须制作一个函数来做这样的事情 123 -> 321 递归 当我通过调试器看到我的 func 的工作时,我看到一个改变了,但是当我在 main 上调用函数时,没有任何改变 这是我的代码

#include <stdio.h>
#include <math.h>

long int SwapNum(long int , int);
int CountRoz(long int);

int main(){
    long int a = 123;
    printf("%ld", a);

    SwapNum(a, CountRoz(a));
    printf("%ld", a);

}
int CountRoz(long int a) {
    if (a / 10 == 0)
        return 1;
    return 1 + CountRoz(a / 10);
}
long int SwapNum(long int a, int b) {
    
    a +=a % 10 * pow(10, 2 * b - 1);
    if (b == 1) {
        return 1;
    }
    b--;
    return SwapNum(a / 10, b);
}

你能帮帮我吗,因为我找不到错误

虽然我不确定你的算法是否完全正确,但你也可以尝试通过引用传递。

long int SwapNum(long int *, int);
...
    SwapNum(&a, CountRoz(a));
...
long int SwapNum(long int *a, int b) {
    *a += *a % 10 * pow(10, 2 * b - 1);
    if (b == 1) { return 1; }
    b--;
    long int a2 = *a/10;
    return SwapNum(&a2, b);
}

所以,模数运算符可能就是您在 Swapnum 的第一行中要尝试的。 123 % 10 得到 123 除以 10 的余数。 请记住,整数数学会产生整数; 12/10 产生 1.

假设我们从:

开始
  • 123、0
  • 123/10, 0*10 + 123%10 => 12, 3
  • 12/10, 3*10 + 12%10 => 1, 32
  • 1/10, 32*10 + 1%10 => 0, 321
  • 0, 321 => a 没有剩余数字,所以 321 是我们的答案

    我们像您计划的那样通过除以 10 和
    来遍历 A 中的数字 还可以通过乘以 10(加上余数)来构建 return 值
    long int SwapNum(long int, long int);
    
    int main(){
        long int a = 12388569;
        printf("%ld", a);
        printf("%ld", SwapNum(a,0));
    }
    long int SwapNum(long int a, long int b) {
        if (a == 0) return b;
        return SwapNum(a/10, b*10 + a%10);
    }
    

    希望这对您有所帮助!
    罗恩。