我们编程,最主要的是要用机器的思维去思考我们的问题,比如我们如何通过C语言来获取一个正整数的位数,下面我们用以下几种方法实现。
方法一
采用while循环,所有外部执行一次,当输入0 时,错误的输出0位
#include <stdio.h> int main(void) { int x; int n=0; printf("请输入一个任意位数的正整数\n"); scanf("%d",&x); n++; x /=10; while(x>0) { n++; x /=10; } printf("你输入的是 %d 位数。\n",n); return 0; }
方法二
采用do while循环,当我们输入0时,会正确的输出1.
#include <stdio.h> int main(void) { int x; scanf("%d",&x); int n=0; do { x/=10; n++; } while(x>0); printf("%d",n); return 0; }
方法三
#include <stdio.h> int main(void) { int n,m,t; scanf("%d",&n); if(n<0) printf("请输入正整数!\n"); if(n<=9&&n>=0) m=1; else { m=0; while(n>=1) { n=n/10; ++m; } } printf("%d\n",m); return 0; }
方法四
#include <stdio.h> int main(void) { int n,m,t; scanf("%d",&n); if(n<0) printf("请输入正整数!\n"); if(n<=9&&n>=0) m=1; else { m=0; while(n>=1) { n=n/10; ++m; } } printf("%d\n",m); return 0; }
方法五
我们在方法四中加入正整数的判断,并且逆序打印,这里没有删除高位的0
#include <stdio.h> int main(void) { int a[100],j=0,l,n,x,m=0; BEGIN: printf("请输入一个正整数.\n"); scanf("%d",&n); if(n<0) { printf("请输入正整数!"); goto BEGIN; } else while(n!=0) { x=n%10; a[j]=x;//把数存在数组中就任由你处置了 j++; n=n/10; m++; } printf("您输入的数的位数是%d\n",m); printf("逆序打印为:"); for(l=0; l<j; l++) printf("%d",a[l]); printf("\n"); return 0; }
方法六
这里我们运行符合,但是,在位数上占了1
#include <stdio.h> #include <string.h> int main(void) { int m=0; int i=0; int j=0; printf("输入一个整数:\n"); scanf("%d",&m); char ch[32]= {0}; //itoa()函数把整数转换成字符串,并返回指向转换后的字符串的指针 itoa(m,ch,10); printf("位数为:%d\r\n",strlen(ch)); for( i=0; i<j; j--) printf("%c;",ch[j-1]); printf("\r\n"); return 0; }