很多时候需要实现数字逆序,比如456逆序之后为654,依此类推。
首先考虑十进制的情况,想到读入一个数时,对10取余数,然后除10,逐渐输出,需要考虑的是负数时需要通过一个负号变为正数,即
#include<stdio.h>
void main()
{
int n;
scanf("%d",&n);
if(n<0){
n=-n;}
while(n>0)
{
printf("%d",n%10);
n/=10;
}
printf("%d");
}
非十进制可以考虑将10换为n即可。但是这种一般适用于直接输出的情况,而实际有时需要储存,于是变成这样:
int inverse(int n)
{
int i=0,j=0,b[10],sum=0,c,x;
while(n>0)
{
x=n%10;
i++;++j;
b[i]=x;
n=n/10;
}
j-=1;
for(int k=1;k<=i;k++,j--)
{
c=b[k]*pow(10,j);
sum+=c;
}
return sum;
}
i用来标记位数,j用来还原数字,但是这样明显不如通过字符串string类型进行操作,如:
int n,b[110],c[110];
string a;
cin>>n;
scanf("%s",a);
for(int i=strlen(a)-1;i>=0;i--)
{
if(n==16)
{
if(a[i]>='0'&&a[i]<='9'){b[strlen(a)-i-1]=a[i]-48;c[i]=a[i]-48;}
if(a[i]>='A'&&a[i]<='Z'){b[strlen(a)-i-1]=a[i]-55;c[i]=a[i]-55;}
}
else {b[strlen(a)-i-1]=a[i]-48;c[i]=a[i]-48;}
}
或者也可以:
int n,h;
string m;
cin>>n>>m;
h=m.length();
for(int i=1;i<=h;i++)
{
int o=m[i-1]-'0';
if(o<=9)a[i]=o;
else a[i]=o-7;
}