欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

“判断整数n的位数” “正序输出n” “逆序输出n” 如何编程

程序员文章站 2022-03-01 23:21:39
...

1、判断整数n的位数
    思考:由于定义n为整型,所以当 n除以10时,就是将个位丢弃。
              例如:int n = 1234,int a = n/10,则 a = 123
              如果我们不断给 n 除以 10 呢?我们发现当 1234 除到第四次时,n的值为0
               除以10的次数,即丢弃个位的次数,与 n 的位数是相同的
               通过这样的思路我们就可以通过循环语句将程序写出,如下
       
int test_01(int n){
	int i = 0;
	do{
		i++; //i 用来统计 n 除以 10 的次数
		n /= 10;		
		}while(n != 0);

	return i;
}

 

2、逆序输出 n 的每一位数字
    思考:通过上面的不断丢弃个位,我们可以计算出 n 的位数
              那么我怎么把个位不是挨个丢弃,而是挨个保存呢?
              这样保存下来的数字不就是我们要求的 n 的逆序数字了吗?
             我们可以这样做   int n = 1234;  则
                 1234 % 10 = 4           1234 / 10 = 123 (因为是整型,所以舍去小数部分)
                    123 % 10 = 3            123 / 10 = 12

                    12 %  10 = 2       12 / 10 = 1
 1 %  10 = 1        1 / 10 = 0
通过以上的规律,我们发现可以不断对变化的 n 取余,其结果就是我们需要的
程序如下:


void test_02(int n){
 while(n != 0){
  int a = n % 10;      // n 对 10 取余,a 不断保存个位数字
   n /= 10;            // n 进行循环,将个位数字丢弃
  printf("%d ",a);    
 }
 printf("\n");
 }
}

3、n中有几个1?
   思考:这个问题就简单了,只要将上一题的“将每位数字输出”,改成让“每位数字与 1 比较大小”,如果相等则计数器加一
             程序如下:
                
             
void test_03(int n){
 int i = 0;
 while(n != 0){
  int a = n%10;
  if(a == 1){
   i++; //判断 a 是否等于 1 ,如果为 1 ,则 i 增加一
  }
  n /= 10;  
 }
 printf("这个数字有 %d 个 1\n",i);
}

     
4、正序输出n的每一位数字
 思考:先从具体数字总结规律,所以先设n = 1234 ,t=1000

                 1234 / 1000 = 1      1234 %1000 = 234
           234 / 100 =  2       234 % 100 = 34
             34 /  10=  3       34 % 10 = 4
              4 /  1 =  4         4 % 1  = 0
                 从面的式子我们发现左边一列式子的结果,正是我们所求
         首先通过整除来不断获取 n 的最高位,再通过取余将剩下的数字赋值给 n,两者间形成循环
         这样,程序便能简单写出。但还有一个问题就是如何确定刚开始 t 的值?
         我们可以使用之前定义的“求 n 是几位数”函数来求 t,因为 t 的值即是 10 的(n的位数 - 1)的次方
  
void test_04(int n){
	while( n != 0){
		 int temp = MyPow(10,test_01(n)-1);  //定义 temp 的值
		 int m = n/temp;  //通过整除,用 temp 来获取 n 的最高位
		 n %= temp;	 //通过取余,获取 n 剩下的数字
		printf("%d ",m);	
	}
		printf("\n");

}
其中的pow函数,既可以自己定义,也可以用库函数<math.h>,这里我是自己定义的
 
int MyPow(int m,int n){
 int i = 1;
 int a = m;
 if(m == 0){   //用if语句将 底数为0 和 指数为0 两种特殊情况另外表示
   return 0;
  }else if(n==0){
   return 1;
 }
 while(i < n ){  
  m *= a;
  i++;
 }
 return m;
}




 

相关标签: C 逆序 正序