找出数字的所有数字是否相等

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.