数位拆分–逆序数
问题描述
给定一个数n,将这个数的各位顺序颠倒,称为逆序数m。例如1234的逆序数是4321。数据输入输入多个正整n(0~n~10^9)。输入不会包含多余的前导零,即不会输入0021这样的数。结果输出如果m是n的k倍(k为整数),那么输出n*k=m。如果m不是n的整数倍,那么输出n和n的逆序数。逆序如果有前导零需要输出。
输入样例:
1089
1234
120
输出样例:
1089*9=9801
1234 4321
120 021
代码如下:
#include <cstdio>
char ver[10]; // 将数字转换为字符数组保存
int ind = 0; // 保存这个字符有多少位
int getver(int n) {
int m = 0;
ind = 0;
while(n>0) {
ver[ind++] = n%10 + '0'; // 得到字符'0'-'9'
m = m * 10 + n%10; // 将原来的低位变成高位
n /= 10; // 擦除已经保存的低位
}
return m;
}
int main() {
int n;
while(scanf("%d", &n)==1) {
int m = getver(n);
if(m%n==0) {
printf("%d*%d=%d\n", n, m/n, m);
} else {
printf("%d ", n);
for(int i=0; i<ind; i++) {
printf("%c", ver[i]);
}
printf("\n");
}
}
return 0;
}
输出结果:
1089
1089*9=9801
1234
1234 4321
120
120 021