我的功能在调试方面很好,但不是主要的

发布于 2025-01-22 17:04:28 字数 625 浏览 0 评论 0原文

我必须制作一个像123 - > 321带递归 当我通过调试器看到我的功能的工作时,我会看到一个变化,但是当我在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);
}

您可以帮助我,因为我找不到错误

I have to make a func that do somtheing like this 123 -> 321 with recursion
When i see work of my func via debugger i see that a changed, but when i call function on main, nothing changed
This is my code

#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);
}

Can you help me, because I cant find error

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

青朷 2025-01-29 17:04:28

您也可以尝试通过引用传递,尽管我不确定您的算法是否完全正确。

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 =&gt; 12、3
  • 12/10,3*10 + 12%10 =&gt; 1,32
  • 1/10,32*10 + 1%10 =&gt; 0,321
  • 0,321 =&gt;不再留下A的数字,所以321是我们的答案

    我们像您计划的那样,通过除以10和
    来遍历数字
    还可以通过乘以10(加上剩余的)来建立返回值

     长int swapnum(long int,long int);
    
    int main(){
        长int a = 12388569;
        printf(“%ld”,a);
        printf(“%ld”,swapnum(a,0));
    }
    长int swapnum(长int a,long int b){
        if(a == 0)返回b;
        返回swapnum(a/10,b*10 + a%10);
    }
     

    希望这会有所帮助!
    ron。

  • You can also try passing by reference although I'm not sure your algorithm is exactly right.

    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);
    }
    

    So, the modulus operator is probably what you're trying for in your first line in Swapnum. 123 % 10 yields the remainder of 123 divided by 10.
    And remember, integer math will yield integers; 12/10 yields 1.

    Let's say we start with:

  • 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 => no more digits left from a, so 321 is our answer

    We traverse digits in A like you planned by dividing by 10 and
    also build up the return value by multiplying by 10 (plus remainder)

    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);
    }
    

    Hope this helps!
    Ron.

  • ~没有更多了~
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文