“判断整数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++] vector insert
推荐阅读
-
编程从键盘输入一个正整数n,判断该数的奇偶性,若为奇数输出“odd”,若为偶数输出“even”
-
编程判断输入整数的正负性和奇偶性。 **输入格式要求:“%d“ 提示信息:“Input m:“ **输出格式要求: 如果是负偶数,则输出“%d is a negative even\n“ 如果是负奇
-
统计十进制数n的位数、正序输出和逆序输出十进制数字n
-
int []arr={1,2,3,4,5,6,7,8,9,10} n=2,m=3 的交叉输出;先正序后逆序;
-
判断一个整数是几位数,并正序输出和逆序输出它的每一位数。
-
给一个正整数n,求出位数。并按正序输出,逆序输出
-
“判断整数n的位数” “正序输出n” “逆序输出n” 如何编程