我需要找到所有小于或等于我输入的数字的和(它要求它们在基数10和2中都是回文)。这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int pal10(int n) {
int reverse, x;
x = n;
while (n != 0) {
reverse = reverse * 10 + n % 10;
n = n / 10;
}
if (reverse == x)
return 1;
else
return 0;
}
int length(int n) {
int l = 0;
while (n != 0) {
n = n / 2;
l++;
}
return l;
}
int binarypal(int n) {
int v[length(n)], i = 0, j = length(n);
while (n != 0) {
v[i] = n % 2;
n = n / 2;
i++;
}
for (i = 0; i <= length(n); i++) {
if (v[i] == v[j]) {
j--;
} else {
break;
return 0;
}
}
return 1;
}
int main() {
long s = 0;
int n;
printf("Input your number \n");
scanf("%d", &n);
while (n != 0) {
if (binarypal(n) == 1 && pal10(n) == 1)
s = s + n;
n--;
}
printf("Your sum is %ld", s);
return 0;
}
它总是返回0。我猜我在
binarypal
函数中做错了什么。我该怎么办? 最佳答案
您有多个问题:
函数pal10()
失败,因为reverse
未初始化。
函数binarypal()
太复杂,应该使用与pal10()
相同的方法。
您应该避免将布尔函数返回值与1
进行比较,C中的约定是返回0
表示false,非零表示true。
您应该避免对变量名使用l
,因为它看起来与大多数等宽字体上的1
非常相似。事实上,它与原来的信使打字机字体是相同的字形。
下面是一个带有多基函数的简化和修正版本:
#include <stdio.h>
#include <stdlib.h>
int ispal(int n, int base) {
int reverse = 0, x = n;
while (n > 0) {
reverse = reverse * base + n % base;
n = n / base;
}
return reverse == x;
}
int main(void) {
long s = 0;
int n = 0;
printf("Input your number:\n");
scanf("%d", &n);
while (n > 0) {
if (ispal(n, 10) && ispal(n, 2))
s += n;
n--;
}
printf("Your sum is %ld\n", s);
return 0;
}
关于c - 查找以2为底数和以10为底的回文数,并将其求和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40577599/