#include "stdio.h" long reverse(long i) { long m, j=0; m = i; while(m){ j = j*10 + m%10; m = m/10; } return j; } long isCircle(long n) { long m; m = reverse(n); if(m != n) return isCircle(m)+1; else return 1; } void palindrome(long low,long high) { long i; for(i=low;i<=high;i++) { if(isCircle(i) == 3) printf("%ld ",i); } } int main() { printf("The palindrome numbers between 11~999 are\n"); palindrome(11,999); return 0; }优化代码
时间: 2023-12-10 22:02:22 浏览: 55
可以考虑在判断回文数的时候,直接计算各个数位上的数字之和,判断这个数字之和是否是回文数,这样就不需要多次调用 `reverse` 函数了。
代码如下:
```c
#include "stdio.h"
long isPalindrome(long n) {
long sum = 0, m = n;
while (m) {
sum = sum * 10 + m % 10;
m /= 10;
}
return sum == n;
}
long isCircle(long n) {
long sum = 0, m = n;
while (m) {
sum += m % 10;
m /= 10;
}
return isPalindrome(sum);
}
void palindrome(long low, long high) {
long i;
for (i = low; i <= high; i++) {
if (isCircle(i)) {
printf("%ld ", i);
}
}
}
int main() {
printf("The palindrome numbers between 11~999 are\n");
palindrome(11, 999);
return 0;
}
```
相关问题
#include "stdio.h" long reverse(long i) { long m,j=0; ________________ ; while(m){ j= ________________ ; m=m/10; } return j; } long isCircle(long n) { long m; m= ________ ; ; if(m != n) return ________ ; else return ________ ; } palindrome(long low,long high) { long i; for(i=low;i<=high;i++) { if( ____________________________________ ==3 3) printf("%d ",i); } } main() { printf("The palindrome numbers between 11~999 are\n"); palindrome(11,999); }填空
下面是代码填空的答案:
```
#include "stdio.h"
long reverse(long i) {
long m, j = 0;
m = i;
while(m) {
j = j * 10 + m % 10;
m = m / 10;
}
return j;
}
long isCircle(long n) {
long m;
m = reverse(n);
if(m != n) return 0;
else return 1;
}
palindrome(long low, long high) {
long i;
for(i=low; i<=high; i++) {
if(isCircle(i) == 1)
printf("%d ", i);
}
}
int main() {
printf("The palindrome numbers between 11~999 are\n");
palindrome(11, 999);
return 0;
}
```
这是一个求回文数的程序,输出11~999之间的回文数(即正反读都一样的数)。其中,reverse()函数用于将一个数反转,isCircle()函数用于判断一个数是否为回文数,palindrome()函数用于输出指定范围内的回文数。
c语言由键盘输入任意字母字符串number345reverse将其中字母直接输出,数字逆序输出,修改下面代码#include<stdio.h> int main() { char ch: long m,n,nx=0; while(ch=getchar()!='\n') { if(ch>='0'&.&.ch<='9') m=m*10+ch-0; else putchar(ch); } n=m; while(n!=0) { nx=nx*10+m%10; m=m/10; } printf("/n%1d reverse number is %1d\n",n,nx); return 0; }
以下是修改后的代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
int len, i;
printf("请输入字符串:");
scanf("%s", str);
len = strlen(str);
for (i = 0; i < len; i++) {
if (str[i] >= 'a' && str[i] <= 'z' || str[i] >= 'A' && str[i] <= 'Z') {
printf("%c", str[i]);
}
}
printf(" ");
for (i = len - 1; i >= 0; i--) {
if (str[i] >= '0' && str[i] <= '9') {
printf("%c", str[i]);
}
}
return 0;
}
```
修改的主要内容是在第一个for循环中增加了判断字母的条件,只有字母才会被输出;在第二个for循环中增加了判断数字的条件,只有数字才会被逆序输出。同时,在数字输出前添加了一个空格,使输出结果更加清晰。
阅读全文