找出数字的所有数字是否相等
finding out if all the digits of a number are equal
所以我想首先说我已经解决了这个问题,但是有一些事情困扰着我,
首先是代码:
#include <stdio.h>
int flag = 1;
int controlNumber(int);
int main() {
int array[10] = { 233, 45, 777, 81, 999999, 36, 90, 88, 11, 61 };
int i;
int c;
for (i = 0; i < 10; i++) {
printf("%d >> ", array[i]);
c = controlNumber(array[i]);
if (c == 1) {
printf("all digits are equal\n");
} else {
printf("not all digits are equal\n");
}
}
return 0;
}
int controlNumber(int a) {
int q = a;
int r = a % 10;
int temp;
while (q != 0) {
temp = q % 10;
if (temp == r) {
q = q / 10;
} else {
flag = 0;
return flag;
}
}
return flag;
}
仅当全局变量 flag
在函数 controlNumber
的范围内成为局部变量且值为 1
时,代码才有效,我真的想不通为什么会这样,因为逻辑应该还是一样的。
此外,我在某种程度上仍然是初学者,所以对于任何缩进错误,我深表歉意。
全局变量保留其值。在您的情况下,如果 flag
是全局的,一旦设置为 0
(在 controlNumber
内),它将保留该值。代码中没有其他地方可以再次1
。
将其设为函数的局部变量将导致它在每次调用函数时都初始化为 1
。
编辑:如果你想让它成为全局的,你可以每次都将它设置为1
controlNumber
returns 0
,即 printf("not all digits are equal\n");
.
之前或之后
对于初学者来说,定义一个依赖于全局变量的函数是一个非常糟糕的主意。其实是你的程序有bug的原因。你忘记每次调用函数前都将全局变量标志重置为1。
函数可以这样定义,不需要任何多余的全局变量
int controlNumber( int n )
{
const int Base = 10;
int digit = n % Base;
while ( ( n /= Base ) && ( n % Base == digit ) );
return n == 0;
}
这是一个演示程序。
#include <stdio.h>
int controlNumber( int n )
{
const int Base = 10;
int digit = n % Base;
while ( ( n /= Base ) && ( n % Base == digit ) );
return n == 0;
}
int main(void)
{
int array[] = { 233, 45, 777, 81, 999999, 36, 90, 88, 11, 61 };
const size_t N = sizeof( array ) / sizeof( *array );
for ( size_t i = 0; i < N; i++ )
{
printf( "%d >> ", array[i] );
if ( controlNumber( array[i] ) )
{
printf( "all digits are equal\n");
}
else
{
printf( "not all digits are equal\n" );
}
}
return 0;
}
程序输出为
233 >> not all digits are equal
45 >> not all digits are equal
777 >> all digits are equal
81 >> not all digits are equal
999999 >> all digits are equal
36 >> not all digits are equal
90 >> not all digits are equal
88 >> all digits are equal
11 >> all digits are equal
61 >> not all digits are equal
例如,如果您要更改函数中的常量 Base
并使其等于 8
int controlNumber( int n )
{
const int Base = 8; //10;
int digit = n % Base;
while ( ( n /= Base ) && ( n % Base == digit ) );
return n == 0;
}
那么你会得到如下结果。
233 >> not all digits are equal
45 >> all digits are equal
777 >> not all digits are equal
81 >> not all digits are equal
999999 >> not all digits are equal
36 >> all digits are equal
90 >> not all digits are equal
88 >> not all digits are equal
11 >> not all digits are equal
61 >> not all digits are equal
在这种情况下,例如数字 45
在八进制表示中具有相同的数字,因为在八进制表示中,数字的写法类似于 055
.
所以我想首先说我已经解决了这个问题,但是有一些事情困扰着我,
首先是代码:
#include <stdio.h>
int flag = 1;
int controlNumber(int);
int main() {
int array[10] = { 233, 45, 777, 81, 999999, 36, 90, 88, 11, 61 };
int i;
int c;
for (i = 0; i < 10; i++) {
printf("%d >> ", array[i]);
c = controlNumber(array[i]);
if (c == 1) {
printf("all digits are equal\n");
} else {
printf("not all digits are equal\n");
}
}
return 0;
}
int controlNumber(int a) {
int q = a;
int r = a % 10;
int temp;
while (q != 0) {
temp = q % 10;
if (temp == r) {
q = q / 10;
} else {
flag = 0;
return flag;
}
}
return flag;
}
仅当全局变量 flag
在函数 controlNumber
的范围内成为局部变量且值为 1
时,代码才有效,我真的想不通为什么会这样,因为逻辑应该还是一样的。
此外,我在某种程度上仍然是初学者,所以对于任何缩进错误,我深表歉意。
全局变量保留其值。在您的情况下,如果 flag
是全局的,一旦设置为 0
(在 controlNumber
内),它将保留该值。代码中没有其他地方可以再次1
。
将其设为函数的局部变量将导致它在每次调用函数时都初始化为 1
。
编辑:如果你想让它成为全局的,你可以每次都将它设置为1
controlNumber
returns 0
,即 printf("not all digits are equal\n");
.
对于初学者来说,定义一个依赖于全局变量的函数是一个非常糟糕的主意。其实是你的程序有bug的原因。你忘记每次调用函数前都将全局变量标志重置为1。
函数可以这样定义,不需要任何多余的全局变量
int controlNumber( int n )
{
const int Base = 10;
int digit = n % Base;
while ( ( n /= Base ) && ( n % Base == digit ) );
return n == 0;
}
这是一个演示程序。
#include <stdio.h>
int controlNumber( int n )
{
const int Base = 10;
int digit = n % Base;
while ( ( n /= Base ) && ( n % Base == digit ) );
return n == 0;
}
int main(void)
{
int array[] = { 233, 45, 777, 81, 999999, 36, 90, 88, 11, 61 };
const size_t N = sizeof( array ) / sizeof( *array );
for ( size_t i = 0; i < N; i++ )
{
printf( "%d >> ", array[i] );
if ( controlNumber( array[i] ) )
{
printf( "all digits are equal\n");
}
else
{
printf( "not all digits are equal\n" );
}
}
return 0;
}
程序输出为
233 >> not all digits are equal
45 >> not all digits are equal
777 >> all digits are equal
81 >> not all digits are equal
999999 >> all digits are equal
36 >> not all digits are equal
90 >> not all digits are equal
88 >> all digits are equal
11 >> all digits are equal
61 >> not all digits are equal
例如,如果您要更改函数中的常量 Base
并使其等于 8
int controlNumber( int n )
{
const int Base = 8; //10;
int digit = n % Base;
while ( ( n /= Base ) && ( n % Base == digit ) );
return n == 0;
}
那么你会得到如下结果。
233 >> not all digits are equal
45 >> all digits are equal
777 >> not all digits are equal
81 >> not all digits are equal
999999 >> not all digits are equal
36 >> all digits are equal
90 >> not all digits are equal
88 >> not all digits are equal
11 >> not all digits are equal
61 >> not all digits are equal
在这种情况下,例如数字 45
在八进制表示中具有相同的数字,因为在八进制表示中,数字的写法类似于 055
.