赞
踩
eg:
输入:1234 输出:4321
700 7
题目解析:
因为是逆序,我们可以通过取余一个个提取最后的个位数,然后将结果乘以10,一个个加进。
eg:123
n | a=n%10 | result=result*10+a | n=n/10 |
123 | 3=123%10 | 3=0*10+3 | 12=123/10 |
12 | 2=12%10 | 32=3*10+2 | 1=12/10 |
1 | 1=1%10 | 321=32*10+1 | 0=1/10 |
分析表格,我们可以看见,通过一个循环可以完成逆序,循环的条件是n>0,最后输出result。代码如下:
-
- int main()
- {
- int n,a,result=0;
- scanf("%d",&n);
- do{
- a=n%10;
- result=result*10+a;
- n=n/10;
- }while(n>0);
- printf("%d",result);
-
- }
-
-
eg:
输入:-12340 输出:-4321
题目解析:
我们学过逆序输出正整数的实现,与此题相比较,我们需要考虑,当整数为负数的时候,我们要将他转变成正数在进行拆解,输出时再添上负号。同时,要学会使用函数。
- #include <stdio.h>
- #include <math.h>
-
- int reverse(int num); //函数的引用
-
- int main()
- {
- int n;
-
- scanf("%d", &n);
- printf("%d", reverse(n));
-
- return 0;
- }
-
-
- int reverse(int num)
- {
- int temp,result=0,symble=1; //temp是最后一位数;result是逆序的结果,初始值为0,symble是正负数的标记
-
- if(num<0) //判断原来的num的正负;若为正,则symble不变,若为负,则symble=-1
- {
- num=-num;
- symble=-1;
- } //循环的目的是,把负数转成正数,方便进行下一步
- do //do-while循环,逆序输出
- {
- temp=num%10; //以取余数的方式取num最后一位数
- result=result*10+temp;//通过每次循环将取得的temp加进去,将上一个result乘以10将个位数空出来
- num=num/10;//num除以十去掉原来的个位数
- }
- while(num>0);
- result=result*symble;//将数的正负表示出来
- return result;
-
-
- }
eg:输出12345 输入:1 2 3 4 5
12345是一个5位数
题目解析:
和逆序提取不同,正序提取需要我们从第一位数提取,我们可以通过循环取整将第一位数依次提取出来,分析输出需求记住每一位数有空格,且要计算n是几位数。
以123为例子,123/100=1,123%100=23.....所以依旧可以用循环讨论
但是我们得算出3位数除以100,四位数除1000....所以还需要一个循坏找mask。mask循环可以同时实现计数几位数。
- #include <stdio.h>
-
-
-
- int main()
- {
- int d,t,n,m,cout=1;
- scanf("%d",&n);
- int mask=1;
- t=n; //t和m的作用都是储存n的值
- m=n;
- while(t>9){ //循环语句算出mask的值
- t=t/10;
- mask=mask*10;
- cout++;
- }
- while(mask>0){ //循环语句从第一个数开始提取
- d=n/mask;
- printf("%d",d);
- if(mask>9){
- printf(" ");
- }
- n%=mask;
- mask/=10;
- }
- if(mask<1){
- printf("\n");
- }
- printf("%d是%d位数",m,cout);
- return 0;
- }
-
正序分解和逆序分解都需要用循环解决问题,简单的情况一个循环可以完成,复杂一些则需要多个循环,但是一般不涉及嵌套,但我们得清楚的知道初始值和循环条件,才能将问题解决。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。