C 练习实例29
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
程序分析:学会分解出每一位数,如下解释。
实例
// Created by www.facesoho.com on 15/11/9.
// Copyright © 2015年 小鸟启蒙. All rights reserved.
//
#include <stdio.h>
int main( )
{
long a,b,c,d,e,x;
printf("请输入 5 位数字:");
scanf("%ld",&x);
a=x/10000; /*分解出万位*/
b=x%10000/1000; /*分解出千位*/
c=x%1000/100; /*分解出百位*/
d=x%100/10; /*分解出十位*/
e=x%10; /*分解出个位*/
if (a!=0){
printf("为 5 位数,逆序为: %ld %ld %ld %ld %ld\n",e,d,c,b,a);
} else if(b!=0) {
printf("为 4 位数,逆序为: %ld %ld %ld %ld\n",e,d,c,b);
} else if(c!=0) {
printf("为 3 位数,逆序为:%ld %ld %ld\n",e,d,c);
} else if(d!=0) {
printf("为 2 位数,逆序为: %ld %ld\n",e,d);
} else if(e!=0) {
printf("为 1 位数,逆序为:%ld\n",e);
}
}
以上实例输出结果为:
请输入 5 位数字:12345 为 5 位数,逆序为: 5 4 3 2 1

文人墨客
利用递归:
#include <stdio.h> int digits(int k); void reverseprintNum(int g); int main() { int num; printf("输入一个数:"); scanf("%d", &num); printf("位数:%d\n", digits(num)); printf("逆序输出:"); reverseprintNum(num); return 0; } int digits(int k) { if (k / 10 == 0) return 1; else return digits(k / 10) + 1; } void reverseprintNum(int g) { if (g / 10 == 0) printf("%d", g); else { printf("%d", g % 10); // 最后一个数字作为第一个数字输出 reverseprintNum(g / 10); // 删除最后一个数字 } }文人墨客
参考方法:
#include <stdio.h> int main(){ int k,n,count=0; printf("请输入一个正整数:\n"); scanf("%d",&n); while(n){ k=n%10; printf("%d ",k); count++; n/=10; } printf("\n%d",count); return 0; }文人墨客
参考方法:
#include<stdio.h> #include<string.h> int reverse(int num, char* buf) { int head = 0, tail = num - 1; int counter = num / 2; if(counter == 0) return 0; *(buf + head) ^= *(buf + tail); *(buf + tail) ^= *(buf + head); *(buf + head) ^= *(buf + tail); return reverse(num - 2, buf + 1); } int main() { char buf[6] = {0}; int length = 5; printf("请输入 5 位数字:"); fgets(buf, 6, stdin); if(buf[4] != '\n' && strlen(buf) == 5) { scanf("%*[^\n]"); scanf("%*c"); } else if(buf[4] == '\n' && strlen(buf) == 5) length = 4; else length = strlen(buf) - 1; reverse(strlen(buf), buf); printf("这个%d位数倒序输出为:%s\n",length, buf); return 0; }文人墨客
参考方法:
#include<stdio.h> int main(void) { int n,count = 0,num; printf("请输入一个不多于5位的正整数:"); scanf("%d",&n); num = n; while(n) { n = n/10; count++; } printf("为%d位数,逆序为:",count); while(num) { printf("%-3d",num%10); num = num/10; } return 0; }文人墨客
参考实例:
#include <stdio.h> int main( ) { int x; int y = 0; printf("请输入一个正整数:\n"); scanf("%d", &x); printf("逆序为:\n"); for (int i = x; i > 0; i /= 10) { printf("%d ", i % 10); y++; } printf("\n为 %d 位数 \n", y); }文人墨客
参考解法
#include <stdio.h> int main() { int i,j,k,count=0; printf("请输入一个不多于5位的正整数:"); scanf("%d",&i); printf("逆序为:"); for(j=1;j<=5;j++) { k=i%10; i=i/10; count++; printf("%d ",k); if(i==0) { break; } } printf("\n为 %d 位数\n",count); return 0; }文人墨客
参考解法:
#include <stdio.h> #include<string.h> void Reverse_Output( int n); static char str[5]; int main() { printf("请输入你的整数:"); scanf("%s",str); printf("这是一个 %lu 位数。\n",strlen (str)); printf("逆序为:"); Reverse_Output(strlen (str)); return 0; } void Reverse_Output(int n) { while(n>0) { printf("%c ",str[--n]); } }文人墨客
其他解法:
#include <stdio.h> int main() { int n; printf("请输入大于 10 的数字:"); scanf("%d",&n); int x[1000]; int i=0; int j=0; while(n!=0) { x[i]=n%10; n=n/10; i++; } int z=i; printf("该数字为 %d 位数",z); printf("\n逆序为:"); for(j=0;j<z;j++) { printf("%d ",x[j]); } }以上实例输出结果为: