C 函数,它将数字拆分然后求和
我正试图解决一个需要我记下数字的问题。使用%和/取最右边的数字,并对分隔的数字求和。然后告诉我这个数字是否可以被9整除 我创建了一个函数,将最右边的数字分隔开,然后我尝试获取该数字并通过while循环运行它。存在的问题是,当我运行while循环时。它会创建一个无限循环,否则将无法打印输出C 函数,它将数字拆分然后求和,c,function,split,sum,digits,C,Function,Split,Sum,Digits,我正试图解决一个需要我记下数字的问题。使用%和/取最右边的数字,并对分隔的数字求和。然后告诉我这个数字是否可以被9整除 我创建了一个函数,将最右边的数字分隔开,然后我尝试获取该数字并通过while循环运行它。存在的问题是,当我运行while循环时。它会创建一个无限循环,否则将无法打印输出 #include <stdio.h> int loopnum(int n); int main(void) { int num; int sum = 0; int d =
#include <stdio.h>
int loopnum(int n);
int main(void)
{
int num;
int sum = 0;
int d = loopnum(num);
printf("Enter a number:\n");
scanf("%d", &num);
while (loopnum(num) > 0) {
printf("d = %d", d);
printf(",sum = %d\n", sum);
}
if (num % 9 == 0) {
printf("n = %d is divisible by 9\n", num);
}
else {
printf("n = %d is not divisible by 9\n", num);
}
return 0;
}
int loopnum(int n)
{
n = n % 10;
n = n / 10;
return n;
}
#包括
intloopnum(intn);
内部主(空)
{
int-num;
整数和=0;
int d=loopnum(num);
printf(“输入一个数字:\n”);
scanf(“%d”和&num);
while(loopnum(num)>0){
printf(“d=%d”,d);
printf(“,sum=%d\n”,sum);
}
如果(数值%9==0){
printf(“n=%d可被9整除”,num);
}
否则{
printf(“n=%d不能被9整除”,num);
}
返回0;
}
int loopnum(int n)
{
n=n%10;
n=n/10;
返回n;
}
输入一个数字:
9
n=9可被9整除
此代码的结果假定为输出d=“数字”,总和=
“数字+总和”和n=“数字”可被9整除。例如,如果我
输入9。输出将是d=9,sum=9。loopnum代码错误。它总是返回零,因此
而不会循环
int loopnum(int n)
{
n = n % 10; // After this n is a number between 0 and 9
n = n / 10; // Consequently, when you divide by 10 you'll end up with zero
return n;
}
您的设计需要两件事:
1) 还剩下的
2) 改变
为此,您需要传递一个指向n
的指针
比如:
int loopnum(int *n)
{
int res = *n % 10;
*n = *n / 10;
return res;
}
int main(void)
{
int x = 123;
int sum = 0;
while(x) sum += loopnum(&x);
printf("%d\n", sum);
return 0;
}
这个函数没有意义
int loopnum(int n)
{
n = n % 10;
n = n / 10;
return n;
}
例如,对于n
等于27
,您将得到
n = n % 10;
现在n
等于7
,然后
n = n / 10;
现在n
等于0
因此,对于数字27
,函数返回0
而且在循环内部
while (loopnum(num) > 0) {
printf("d = %d", d);
printf(",sum = %d\n", sum);
}
既不更改num
,也不更改d
,也不更改sum
定义这样一个函数没有什么意义,除非它本身可以输出中间的和和和数字
如果没有该函数,程序可以按以下方式运行
#include <stdio.h>
int main(void)
{
while ( 1 )
{
const unsigned int Base = 10;
const unsigned int DIVISOR = 9;
printf( "Enter a non-negative number (0 - exit): " );
unsigned int n;
if ( scanf( "%u", &n ) != 1 || n == 0 ) break;
unsigned int sum = 0;
unsigned int tmp = n;
do
{
unsigned int digit = tmp % Base;
sum += digit;
printf( "d = %u, sum = %u\n", digit, sum );
} while ( tmp /= Base );
printf( "\nn = %u is %sdivisble by %u.\n\n",
n,
sum % DIVISOR == 0 ? "" : "not ", DIVISOR );
}
return 0;
}
num
从不在while循环中更改。而且num
也从不初始化int d=loopnum(num)代码>您正在按值传递数字。因此,函数中所做的更改不会反映在调用函数中。您应该使用指针。您永远不会更改num
,那么您希望loopnum(num)
什么时候更改?我希望loopnum(num)在while循环中运行并提取数字,然后对数字求和。我注意到while循环中缺少一行求和的数字。
#include <stdio.h>
int main(void)
{
while ( 1 )
{
const unsigned int Base = 10;
const unsigned int DIVISOR = 9;
printf( "Enter a non-negative number (0 - exit): " );
unsigned int n;
if ( scanf( "%u", &n ) != 1 || n == 0 ) break;
unsigned int sum = 0;
unsigned int tmp = n;
do
{
unsigned int digit = tmp % Base;
sum += digit;
printf( "d = %u, sum = %u\n", digit, sum );
} while ( tmp /= Base );
printf( "\nn = %u is %sdivisble by %u.\n\n",
n,
sum % DIVISOR == 0 ? "" : "not ", DIVISOR );
}
return 0;
}
Enter a non-negative number (0 - exit): 9
d = 9, sum = 9
n = 9 is divisble by 9.
Enter a non-negative number (0 - exit): 123456
d = 6, sum = 6
d = 5, sum = 11
d = 4, sum = 15
d = 3, sum = 18
d = 2, sum = 20
d = 1, sum = 21
n = 123456 is not divisble by 9.
Enter a non-negative number (0 - exit): 0