C语言——逆序输出整数和正序分解正整数

一、逆序输出正整数

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 
#include 
 
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 
 

 
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;
}
 

四、总结

正序分解和逆序分解都需要用循环解决问题,简单的情况一个循环可以完成,复杂一些则需要多个循环,但是一般不涉及嵌套,但我们得清楚的知道初始值和循环条件,才能将问题解决。

你可能感兴趣的:(初学c语言,动态规划,算法,c#,c语言)