求出一个数的个位数并丢弃它,用来顺序输出和逆序输出这个数

本文介绍如何使用C语言编程实现求解一个数的位数,并顺序及逆序输出该数。通过GetFigures函数计算位数,PrintfReverse函数逆序输出,PrintOrder函数顺序输出。代码中涉及ifelse、do-while循环和for循环,以及对负数处理。

    在之前学过的C语言基础部分中,我会求两个数中较大者,会写判断一个数是否为素数的代码,我觉得在这些代码中应该注意的就是for循环和while循环还有do-while仅有的区别,do-while语句至少要先执行一次循环体,所以循环变量就要重新考虑,循环中的循环条件要正确,防止越界,这点可以联系到后来学到的数组中,如果int arr[10],那输出数组中数字的时候就要注意下标从零开始,一定要小于数组的长度。

    ifelse语句较为简单,上手快,但是要做的事较为复杂的时候就不适用了。

    n%10,表示对十进制数取余,也就是说,例如这个数n为24136,那么24136%10=6,就是得到了这个数的各位数字:6;n/10,表示用n整除10,n的类型为整型,整数除以整数得到的数还是个整数,这里给n整除以10以后,会缩小位数,例如这个数n为24136,那么24136/10=2413.丢掉了它的个位数。

应用:(1)求一个数为几位数(2)顺序输出这个数(3)逆序输出这个数

题目分析:(1)如24136为五位数,那么就需要一个数来保存输出的位数,可定义为count;(2)如24136顺序输出为24136,也可以调用第一题的count,用来保存各个位的数字;(3)可以先得到各个位的数然后再从后向前输出。

程序:

#include<stdio.h>
int GetFigures(int n)//求数n是几位数.
{
int count=0;//定义一个次数,用来保存循环的次数
while(n!=0)
{
count++;//次数从0开始+1;
n/=10;//整除丢掉个位,如:1234/10=123,此时丢掉4
}
return count;//必须要有返回值.
}


void PrintfReverse(int n)//逆序输出
{
if(n<0)
{
printf("-");//判断给出的n是否为负,如果是负数,先打印负号再顺序输出
n=-n;
}
do
{
printf("%d ",n%10);//取余可以得到这个数的尾数,do语句先执行一次输出这个数的尾数
n/=10;//丢弃个数可得到剩下的数.
}while(n!=0);//判断这个数整除10以后是否不等于0,不等于就继续循环直到跳出.
printf("\n");
}
void PrintOrder(int n)//顺序输出
{
if(n<0)
{
printf("-");//判断给出的n是否为负,如果是负数,先打印负号再顺序输出
n=-n;
}
int a=GetFigures(n);//调用求位数的函数,把它的值赋给a
int power=1;
for(int i=0;i<a-1;i++)
{
power*=10;
}
do
{
printf("%d ",n/power);//如果这个数是五位数,n/power用来求出它的首位数字
n%=power;//去掉它的首位数
power/=10;//power退一位
}while(n!=0);
printf("\n");
}
int main()
{
PrintfReverse(23456);
PrintOrder(23456);
printf("%d\n",GetFigures(23456));
PrintfReverse(-658732);
PrintOrder(-658732);
printf("%d\n",GetFigures(-658732));
return 0;
}

运行结果为:


计算一个的位输出其各位字,有以下几种实现方法: ### 方法一:通过循环不断丢弃个位数字来计算位,通过取余整除操作输出各位字 ```c #include <stdio.h> // 计算整的位 int Count(long long n) { if (n == 0) return 1; int tmp = 0; while (n != 0) { tmp++; n /= 10; } return tmp; } // 顺序输出各位字 void printDigits(int n) { int digits = Count(n); int pow = 1; for (int i = 1; i < digits; i++) { pow *= 10; } while (pow > 0) { printf("%d ", n / pow); n %= pow; pow /= 10; } printf("\n"); } int main() { int n; scanf("%d", &n); int digitCount = Count(n); printf("位: %d\n", digitCount); printf("各位字: "); printDigits(n); return 0; } ``` 此方法中,`Count` 函用来计算整的位,其原理是每次将字除以 10 丢弃个位数字,同时位器加 1,直到字变为 0。`printDigits` 函用于顺序输出各位字,先计算出字的总位,再通过取余整除操作从最高位开始输出各位字 [^2]。 ### 方法二:在一个循环中同时计算位逆序输出各位字 ```c #include <stdio.h> void cooperation() { int n, i = 0, m; scanf("%d", &n); while (n != 0) { m = n % 10; // 得出正的每一位字 printf("%d ", m); // 逆序输出各位字 n /= 10; // 每次除以 10 i++; // 对位进行计 } printf("\n位: %d\n", i); } int main() { cooperation(); return 0; } ``` 该方法在 `cooperation` 函中,通过循环不断取余得到个位数输出,同时将字除以 10 对位进行计,最终输出。此方法输出的各位字是逆序的 [^1]。 ### 方法三:先计算总位,再从最高位开始取余输出各位字 ```c #include <stdio.h> int main() { int temp; int pow = 1; int i = 1; int n; scanf("%d", &n); temp = n; while (temp / 10) { temp /= 10; pow *= 10; ++i; } printf("位: %d\n", i); printf("各位字: "); while (i) { printf("%d ", n / pow); n %= pow; pow /= 10; --i; } printf("\n"); return 0; } ``` 这种方法先通过循环计算出整的总位,同时计算出最高位对应的 10 的幂次方。然后从最高位开始,通过取余整除操作输出各位字 [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值