#include<stdio.h>
int main()
{
int a=1234567;
int remainder=0;
int reverse_a=0;
printf("a=%d\n",a);
while(a!=0)
{
remainder=a%10;//求余数
reverse_a=reverse_a*10+remainder;//
a=a/10;
}
printf("a=%d\n",a);
printf("reverse_a=%d\n",reverse_a);
reverse_num(&a,&reverse_a);
printf("a=%d\n",a);
printf("reverse_a=%d\n",reverse_a);
reverse_num(&reverse_a,&a);
printf("a=%d\n",a);
printf("reverse_a=%d\n",reverse_a);
reverse_num(&a,&reverse_a);
printf("a=%d\n",a);
printf("reverse_a=%d\n",reverse_a);
return 0;
}
void reverse_num(int* num,int* revers_num)
{
int remainder;
while(*num!=0)
{
remainder=*num%10;//求余数
*revers_num=*revers_num*10+remainder;//
*num=*num/10;
}
}
结果:
a=1234567
a=0
reverse_a=7654321
a=0
reverse_a=7654321
a=1234567
reverse_a=0
a=0
reverse_a=7654321
应用:判断回文数:
回文数:例1234567654321;
#include<stdio.h>
void main()
{
int i,temp,palindromic_num;
printf("三位数的回文数有:\n");
int count=0;
for(i=100;i<1000;i++)
{
temp=i;
palindromic_num=isPalindromic(&temp);
if(palindromic_num!=-1)
{
printf("%6d",palindromic_num);
if(((++count)%10)==0)
printf("\n");
}
}
}
void reverse_num(int* num,int* revers_num)//逆序num,结果放在reverse_num指针指向的地址空间里
{
int remainder;
while(*num!=0)
{
remainder=*num%10;//求余数
*revers_num=*revers_num*10+remainder;//
*num=*num/10;
}
}
int isPalindromic(int* aaa)//判断一个数数不是回文数,如果是就返回这个回文数,如果不是就返回-1表示不是回文数
{
int aa=*aaa;//保存指针a指向的空间的值
int temp=0;
reverse_num(aaa,&temp);
if(aa==temp)
{
// printf("%7d是回文数\n",aa);
return aa;
}
return -1;//返回负数表示不是回文数
}
结果:
三位数的回文数有:
101 111 121 131 141 151 161 171 181 191
202 212 222 232 242 252 262 272 282 292
303 313 323 333 343 353 363 373 383 393
404 414 424 434 444 454 464 474 484 494
505 515 525 535 545 555 565 575 585 595
606 616 626 636 646 656 666 676 686 696
707 717 727 737 747 757 767 777 787 797
808 818 828 838 848 858 868 878 888 898
909 919 929 939 949 959 969 979 989 999
java实现:
package Ctojava;
import java.util.Scanner;
public class ReverseNum
{
public static void main(String[] args)
{
int n=123456;
// System.out.println("n="+n);
// System.out.println("m="+reverseNum(n));
int m=0;
Scanner scanner=new Scanner(System.in);
System.out.print("输入一个数:");
n=scanner.nextInt();
if(n==reverseNum(n))
System.out.println(n+"是回文数");
else
System.out.println(n+"不是回文数");
}
public static int reverseNum(int n)//基本类型是值传参
{
int m=0;
int remainder;
while(n!=0)
{
remainder=n%10;//取最后一位
m=m*10+remainder;//先前移一位,再加上余数
n=n/10;
}
return m;
}
}
测试:
输入一个数:12321
12321是回文数
输出10000内(四位数以内)的回文数:
package Ctojava;
import java.util.Formatter;
public class Palindrome
{
static Formatter formatter=new Formatter(System.out);
public static void main(String[] args)
{
int count=0;
for(int i=10;i<=10000;i++)
{
if(isPalindrome(i))
{
count++;
// System.out.print(i+",");
formatter.format("%5d", i);
if(count%10==0)
System.out.println();
}
}
}
public static int reverseNum(int n)
{
int m=0;
int remainder;//余数
while(n!=0)
{
remainder=n%10;
m=m*10+remainder;
n=n/10;
}
return m;
}
public static boolean isPalindrome(int n)
{
return n==reverseNum(n);
}
}
结果:
11 22 33 44 55 66 77 88 99 101
111 121 131 141 151 161 171 181 191 202
212 222 232 242 252 262 272 282 292 303
313 323 333 343 353 363 373 383 393 404
414 424 434 444 454 464 474 484 494 505
515 525 535 545 555 565 575 585 595 606
616 626 636 646 656 666 676 686 696 707
717 727 737 747 757 767 777 787 797 808
818 828 838 848 858 868 878 888 898 909
919 929 939 949 959 969 979 989 999 1001
1111 1221 1331 1441 1551 1661 1771 1881 1991 2002
2112 2222 2332 2442 2552 2662 2772 2882 2992 3003
3113 3223 3333 3443 3553 3663 3773 3883 3993 4004
4114 4224 4334 4444 4554 4664 4774 4884 4994 5005
5115 5225 5335 5445 5555 5665 5775 5885 5995 6006
6116 6226 6336 6446 6556 6666 6776 6886 6996 7007
7117 7227 7337 7447 7557 7667 7777 7887 7997 8008
8118 8228 8338 8448 8558 8668 8778 8888 8998 9009
9119 9229 9339 9449 9559 9669 9779 9889 9999