c语言怎么用除法输出倒序数字,关于C语言如何处理数字(给一个不多于5位的正整数,要求:1.求它是几位数;2.逆序打印出各位数字;3.正序打印出各位数字。)...

例题:

给一个不多于5位的正整数,要求:1.求它是几位数;2.逆序打印出各位数字;3.正序打印出各位数字。

前提说明: 从题中我们可以看出题目中对整数的位数已经限制为5位,我们在这里先不管这个限制,无论输入什么数字都将其按照后面的问题输出

1.求它是几位数?

我们平时在观察到一个数字的时候,要得到其位数我们会选择直接数出来,但计算机并不能拥有人类直接数数的功能。

那计算机如何实现呢? 在这里我们先举一个栗子:

随机数 : 12345

实现 : 我们知道整型变量之间的除法结果只保留个位,那么我们可以用循环体不断让这个数字除以10,并创建一个整形变量来进行记录除以10的次数。 (假设记录变量为count)

Start—>12345/10 = 1234,count = 1 —> 1234/10 = 123,count = 2 —> 123/10 = 12,count = 3 —> 12/10 = 1,count = 4 —> 1/10 = 0 , count=5 —> end

代码实现

int GetFigures(int n) //计算数字位数的函数

{

int count = 0; //将记录数字除以10的次数的整型变量进行初始化

while(n)

{

n/=10;

count++;

}

return count; //返回次数即位数

}

2.逆序打印出各位数字

我们依旧用第一个栗子的数字12345

理解 : 其实相当于将数字的末尾位上的数字不断打印出去,也可以理解成将末尾数字丢出去

实现 : 我们用循环使数字与10取余将其末尾数字得出后输出,然后我们可以再用第一题的算法将该数字的末尾数去掉,不断循环,最终实现逆序打印

Start—>12345%10 = 5,12345/10 = 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 —> end

代码实现

void PrintReverse(int n)

{

do

{

int count1 = n; //将n存入进行取余的变量count1中

count1%=10; //进行取余

n/=10; //进行除法

printf("%d ",count1); //打印末尾数字

}while(n);

printf("\n");

}

3.正序打印出各位数字

理解:正序输出与逆序有一定的相似,但正序的不同之处在于正序得先输出最左边位上的数字,而要得到最左边位上的数字,所以我们要将数字除以10^(该数的位数–1)

实现 : 先将该数除以10^(该数的位数–1)的结果存入建立的变量中后 ,使该数和10^(该数的位数–1)取余 得到新的数字,打印变量,之后便不断循环这一过程

(PS:完全可以在第二步用数组存储逆序的数字,再将数组逆输出便是正序)

Start—>12345/10^(5–1) = 1,12345%10^(5–1) = 2345 —>2345/10^(4–1) = 2,2345%10^(4–1) = 345 —> 345/10^(3–1) = 3,345%10^(3–1) = 45 —> 45/10^(2–1) = 4,45%10^(2–1) = 5 —>5/10^(1–1) = 5,5%10^(1–1) = 0 —> end

代码实现

void PrintOrder(int n)

{

int tmp1 = (int)pow(10.0,GetFigures(n)-1); //将10^(该数的位数-1)存入变量tmp1

do

{

printf("%d ",n/tmp1); //打印首位数字

n%=tmp1; //数字取余

tmp1/=10; //调整10^(该数的位数-1)的大小

}while(n!=0);

printf("\n");

}

PS:本人学习不久,如果有什么不对的地方希望各位大佬指出,在这里给各位大佬磕头了 ~duang duang duang

最后给各位呈上总代码

36b0745fc654e1f4ba85ad623671bf43.png

总代码:

#include #include int GetFigures(int n) //计算数字位数的函数

{

int count = 0; //将记录数字除以10的次数的整型变量进行初始化

while(n)

{

n/=10;

count++;

}

return count; //返回次数即位数

}

void PrintReverse(int n)

{

do

{

int count1 = n; //将n存入进行取余的变量count1中

count1%=10; //进行取余

n/=10; //进行除法

printf("%d ",count1); //打印末尾数字

}while(n);

printf("\n");

}

void PrintOrder(int n)

{

int tmp1 = (int)pow(10.0,GetFigures(n)-1); //将10^(该数的位数-1)存入变量tmp1

do

{

printf("%d ",n/tmp1); //打印首位数字

n%=tmp1; //数字取余

tmp1/=10; //调整10^(该数的位数-1)的大小

}while(n!=0);

printf("\n");

}

int main()

{

/*限制位数

int n;

do

{

scanf("%d",&n);

}while(n > 100000);

*/

printf("%d\n",GetFigures(n)); //打印位数

PrintReverse(n); //调用逆序打印函数

PrintOrder(n); //调用正序打印函数

return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值