将正整数或负整数
涉及三个变量,
n是原数,
m用于储存提取的个位数,
y用于储存重新组合的逆序数。
~
②定义函数
#include<stdio.h>
int fun(int n)
{int m,y} ;
/*给y赋初值,组合数在组合之前为0。*/
y=0
/*给m赋初值,将原数n的绝对值赋值给m。
我试了,也可以直接m=n,删除y=(n>=0)?y:-y,结果一样有负号,绝对值具体还有什么用,等待大神解答。*/
if(n>=0)m=n
else m=-n
/*当m不为0时,循环继续。
当m为0时,即提取到只剩一位数时,m=m/10=0,循环结束。*/
while(m!=0)
{y=y*10+m%10
/*提取个位:m%10。
已经提取个位升为十位:y乘10。
逆序组合数:y。*/
m=m/10}
/*降位提取个位:m/10
不断除10取整,屏蔽个位;
不断将十位降为个位,再提取;
直到只剩一位数,循环结束。*/
y=(n>=0)?y:-y
/*将负数的负号恢复。*/
return y
}
③主函数
{int m1,m2
scanf("%d%d",&m1,&m2)
printf("%d的逆序是%d\t",m1,fun(m1))
printf("%d的逆序是%d\t",m2,fun(m2))
return 0
}
④思路整理
1.输入原数:n
2.求绝对值:m=|n|
3.提取个位:m%10
4.逆序组合:y=y*10+m%10
5.高位降位:m/10
6.恢复负号:y=(n>=0)?y:-y
C语言输入一个正整数n,将其逆序输出:
#include<stdio.h>
#include<stdlib.h>
int main(){
int a
while(scanf("%d",&a)!= EOF){
while(a>0){
printf("%d",a%10)
a = a/10
}
printf("\n")
}
return 0
}
运行结果如下:
扩展资料:
算法:
首先判断输入的正整数的位数,(例如1000=n<9999)
然后输出m(注意,C语言里方括号是取整运算符号)
//因为是整型运算,其实方括号可以省去
m=[n/1000]//【取出千位】
n-=1000*[n/1000]//【n只剩下三位】
m+=10*[n/100]//【取出百位】
n-=100*[n/100]// 【n剩下两位】
m+=100*[n/10]+1000*(n-[n/10])//【取出十位】
printf("d%",m)
int main()
{
int i=12345//定义一个12345的整数
int temp=0//temp作为存储的值
while(i!=0){
temp = temp*10 + i%10
i/=10
} //反序取出来
printf("%d",temp)//打印
return 0
}
扩展资料:反之正序输出
输入 : 12345
输出 :"12345"
char str(int x)
{
char a[100]//存放整数转换过来的字符
int i //计数
if(x/10!=0)
str(x/10)
if(x>=0)
a[i]='0'+x%10 //整数转换成字符存储,字符都是以整数形式存储
else
a[i]='0'+(-x)%10//整形包括负数
printf("%c",a[i++])
}
int main()
{
int i
printf("请输入一个整数:\n")
scanf("%d",&i)
str(i)
return 0
}