是否可以在以后的循环迭代中增加模运算符?
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
.
我正在尝试构建一个简单的程序,将一个长数的数字加在一起。我试图通过使用采用模运算符和一些基本算术的循环来做到这一点。我想通过在循环的每次迭代中将模运算符乘以 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
.