如何判断一个整型数字是不是对称数字(用纯C语言实现)
比如输入是1569651是一个对称数字,而25则不是一个对称数字。
有两种判断方法:
1. 将输入的数字分解成一个个数字,然后进行判断。
2. 将数字的高地位进行互换,然后判断互换后的数与原来的数是否相等。
方法一:数字分解法
1 /*将input输入,输出为一个output数组和input的位数*/ 2 int decompose(int input, int* output) 3 { 4 int* decomposeResult = output; 5 int count = 0, temp = input; 6 7 while(1) 8 { 9 int quotient = temp / 10; 10 int remainder = temp % 10; 11 if((quotient != 0) || ((quotient == 0) && (remainder != 0))) 12 { 13 decomposeResult[count] = remainder; 14 temp = quotient; 15 count ++; 16 } 17 else 18 break; 19 } 20 return count; 21 }
1 /*判断是否是对称数字*/ 2 bool isSymmetryDecompose(const int* input, int count) 3 { 4 for(int i = 0; i < count /2 ; i++) 5 { 6 if(input[i] != input[count - i - 1]) 7 { 8 return false; 9 } 10 } 11 return true; 12 }
方法二:数值高地位互换比较法
1 /*输入数字高地位互换,输出为互换后的结果*/ 2 int highAndLowSwap(int input) 3 { 4 int temp = input, swap = 0; 5 /*将输入的地位按顺序换成输出的高位,比如输入为12345,那么输出为54321*/ 6 while(temp) 7 { 8 swap = swap * 10 + temp %10; 9 temp = temp / 10; 10 } 11 12 return swap; 13 }
/*判断两个数字是否相等,相等则是对称数字,否则不是对称数字*/ bool isSymmetryHighAndLowSwap(int input, int inputSwap) { if(input == inputSwap) return true; else return false; }
测试代码:
1 void main() 2 { 3 int input = 123060321; 4 int decomposeResult[32], swapResult; 5 int count = 0; 6 bool isSymDecomp = false, isSymSwap = false; 7 8 count = decompose(input, decomposeResult); 9 isSymDecomp = isSymmetryDecompose(decomposeResult, count); 10 swapResult = highAndLowSwap(input); 11 isSymSwap = isSymmetryHighAndLowSwap(input, swapResult); 12 13 if(isSymDecomp) 14 printf("Is a symmetry number, judge by decompose method!\n"); 15 else 16 printf("Not a symmetry number, judge by decompose method!\n"); 17 18 printf("\n"); 19 20 if(isSymSwap) 21 printf("Is a symmetry number, judge by swap method!\n"); 22 else 23 printf("Not a symmetry number, judge by swap method!\n"); 24 25 printf("\n"); 26 27 printf("Please print enter to continue ...\n"); 28 getchar(); 29 }
测试结果:
源码下载:
http://download.csdn.net/detail/hudaliquan/9765114