C 如何将整数分割成多个数字?

C 如何将整数分割成多个数字?,c,algorithm,C,Algorithm,我有一个求一个数的模的余数函数,然后有一个除法函数来除掉这个数。我的程序没有按我需要的方式运行。例如,如果我输入2502作为我的数字,我应该得到:2 5 0 2的输出。 我需要能够在每次迭代中存储值,例如: number: 123 123 % 10 = 3 //last digit Number: 123 / 10 = 12 12 % 10 = 2 //second digit Number: 12 / 10 = 1 1 % 10 = 1 //first d

我有一个求一个数的模的余数函数,然后有一个除法函数来除掉这个数。我的程序没有按我需要的方式运行。例如,如果我输入2502作为我的数字,我应该得到:2 5 0 2的输出。 我需要能够在每次迭代中存储值,例如:

number: 123
    123 % 10 = 3  //last digit
Number: 123 / 10 = 12
    12  % 10 = 2  //second digit
Number: 12  / 10 = 1
    1   % 10 = 1  //first digit


这里的想法很简单,但也有一些微妙之处。这里有一些伪代码。你需要转换成C

num = 9934; // or get it from input
do {
    rem = num % 10;  // this gives you the lowest digit
    num = num / 10;  // divide by 10 to get rid of that lowest digit
    print rem; 
} while (num != 0);
我用
做。。。而
循环,因此如果用户输入0,输出将是正确的

如果您对其进行编码并运行它,您会注意到它按相反顺序打印数字:
4 3 9
。因此,在输出数字之前,您需要一些方法来反转数字。三种可能的方法是:

  • 将数字存储在数组中,然后在输出前反转数组
  • 将每个数字推到堆栈上。完成后,从堆栈中弹出每个数字并输出
  • 编写一个递归函数。这将消除对显式堆栈或数组的需要

  • 您还可以将其转换为字符串,然后再转换回该字符串的元素,但请记住“\0”

    您只需使用此函数,它将返回通过参数传递的位数

    size_t  ft_cnbr(int n)
        {
            size_t count;
    
            count = 1;
            if (n < 0)
            {
                count++;
                n = -n;
            }
            while (n > 9)
            {
                n = n / 10;
                count++;
            }
            return (count);
        }
    
    size\u t ft\u cnbr(int n)
    {
    大小/数量;
    计数=1;
    if(n<0)
    {
    计数++;
    n=-n;
    }
    而(n>9)
    {
    n=n/10;
    计数++;
    }
    返回(计数);
    }
    
    返回循环内部,这样循环只执行一次,即使循环运行多次,也不会更改初始值。如果你想在函数中这样做,你需要重新考虑你是怎么做的。您需要在调用之间保留状态。@RetiredInja,而不必重做我的整个结构,最有效的方法是什么?@EdwardElric what structure?您有两个功能,从一开始对其需求就非常值得怀疑。两者都返回一些值,但都不会被多次调用,尽管程序显然应该能够为输出生成多个值。不管怎样,这两个函数的结果都会被完全丢弃。在这一点上,我认为这比其他任何事情都更合适。现在就放弃寻找“高效的”。先为正确而射击。
    size_t  ft_cnbr(int n)
        {
            size_t count;
    
            count = 1;
            if (n < 0)
            {
                count++;
                n = -n;
            }
            while (n > 9)
            {
                n = n / 10;
                count++;
            }
            return (count);
        }