gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:51:28 25 4
gpt4 key购买 nike

所以我想首先说我已经解决了这个问题,但是有些事情困扰着我,

首先是代码:

#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 时,代码才有效,并且我真的不明白为什么会这样,因为逻辑应该还是一样的。

此外,我在某种程度上仍然是初学者,所以对于任何缩进错误,我深表歉意。

最佳答案

对于初学者来说,定义一个依赖于全局变量的函数是一个非常糟糕的主意。其实是你的程序有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

关于arrays - 找出数字的所有数字是否相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66178918/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com