是否可以在以后的循环迭代中增加模运算符?

Is it possible to increment the modulo operator in later loop iterations?

我正在尝试构建一个简单的程序,将一个长数的数字加在一起。我试图通过使用采用模运算符和一些基本算术的循环来做到这一点。我想通过在循环的每次迭代中将模运算符乘以 10 来增加模运算符,以达到下一个数字。我想检查我的代码是否正确,但是,我收到与涉及模运算的行有关的错误,我不太清楚为什么。

这是我尝试构建的:

{
    long i = 0;
    long b;
    int m = 1;
    do
    {
        long number = get_long("Number?\n");
        long a = number % m;
        b = number - a;
        long c = b % m x 10;
        long d = c / m;
        {
            i = i + d;
        }
        {
            m = m x 10
        }
    }
    while (b > 0);
    printf("%ld\n", i);
}

编辑:

我犯了一个基本错误,写了“x”而不是“*”。但是,修复此问题后,我不再收到错误,但程序只是 returns“0”。任何诊断将不胜感激。

int main(void)
{
    long i = 0;
    long b;
    int m = 10;
    long number = get_long("Number?\n");
    do
    {
        long a = number % m;
        b = number - a;
        long c = b % m * 10;
        long d = c / m;
        {
            i = i + d;
        }
        {
            m = m * 10;
        }
    }
    while (b > 0);
    printf("%ld\n", i);
}

首先,您可能会因这些行而出错:

long c = b % m x 10;
m = m x 10

这是因为 x 不是有效的运算符。 乘法运算符是 *:

long c = b % m * 10;
m = m * 10;

至于你的方法,我建议不要改变模操作数,你只需将原始数字除以 10,每次操作将其移动一位。

例如:

#include <stdio.h>

int main()
{
    int sumofdigits = 0;
    int num = 12345;
    
    while(num > 0) {
        sumofdigits += num % 10;
        num /= 10;
    }
    
    printf("%d", sumofdigits);

    return 0;
}

一个数的数字的减和等于该数对 9 的模数。

示例:

#include <stdio.h>

int main(void) {
    int number = 57283;
    
    printf("%d \n", number%9);
    // 5 + 7 + 2 + 8 + 3 == 25 ==> 2 + 5 == 7
    // 57283 % 9 == 7
    return 0;
}

如果您想使用循环来获得减少的总和:

int sum_of_digits(int num)
{
    int sum;
    do
    {
        sum = 0;
        while(num)
        {
            sum += num%10;
            num /= 10;
        }
        num = sum;
    } while (sum >9);
    return sum;
}

但是如果你只想要简单的数字总和(只通过一次):

int sum_of_digits(int num)
{
    int sum = 0;
    while(num)
    {
        sum += num%10;
        num /= 10;
    }
    return sum;
}

你必须通过取模(%)和除法(/)这两个运算符求一个long类型变量的位数之和,你从取模运算符开始求除法的余数(位数) 然后,将这个数字加到总和上,然后除法 / 10 覆盖(求和的数字)直到数字等于 0,如下所示:

int main()
{
     long number=0,m=0;
     printf("Give a number :");
     scanf("%ld",&number);
     long s=0,temp=number;
     while(number != 0)
     {
        m=number%10;
        s+=m;
        number/=10;
     }
     printf("\n%The sum of the digits of the Number %ld is : %ld\n",temp,s);
}

修改后的代码:

long c = b % m * 10;

由于运算顺序,此行将计算 (b % m) 然后乘以 10。 我想你真正想要的是:

long c = b % (m * 10);

其次,下行确定您从哪个数字开始:

int m = 10;

此行确定您在总数中包含的数字之间的位数:

m = m * 10;

因此对于此配置,它将从右边的第 2 个数字开始,并将每个数字相加。 所以对于数字 1234,你会得到 3 + 2 + 1 = 6.

如果你想把每个数字相加,你可以设置:

int m = 10;

你会得到 4 + 3 + 2 + 1 = 10

或者,如果您使用过:

m = m * 10;

你会 3 + 1 = 4.