数字反转

本文详细介绍了几种数字反转的算法实现,包括最简单的整数反转、指定范围内的数字反转、去掉前导0的数字反转以及小数点后数字的反转等,并提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、最简单的数字反转([0,n]的数据进行反转):

n = strlen(a);
void reverse(char a[],int n)
{
	for(int i=0;i<n/2;i++){
		swap(&a[i],&a[n-i-1])
	}
}

2、指定范围的数字反转([l,r]的数据进行反转)

void reverse(char a[],int l,int r)
{
    int m=(l+r)/2,k=0;
    for(int i=l;i<m;i++){
        swap(&a[i],&a[r+l-i-1]);
    }
}

3、去掉前面的0的数字反转:比如230 --> 32

int reverse(char a[],int l,int r)
{
    int m=(l+r)/2,k=0;
    for(int i=l;i<m;i++){
        swap(&a[i],&a[r+l-i-1]);
    }
    while(a[l+k]=='0')k++;
    if(l+k==r) printf("0"); 		  // 如果全是0,那结果就是0
    else
        for(int i=l+k;i<r;i++)
            printf("%c",a[i]);
}

4、反转小数点后面的数,比如 0.012 --> 0.21

int reverse_small(char a[],int l,int r)  // 反转小数点后的数字
{
    int m=(l+r)/2,k=0;
    for(int i=l;i<m;i++){
        swap(&a[i],&a[r+l-i-1]);
    }
    while(a[r-k-1]=='0')k++;
    if(r-k==l)printf("0");
    else
        for(int i=l;i<r-k;i++)
            printf("%c",a[i]);
}

5、反转数据完整代码,比如:700/27 --> 7/72,230% --> 32%

#include <stdio.h>
#include <string.h>

void swap(char *a,char *b)
{
    char c=*a;
    *a=*b;
    *b=c;
}

int reverse(char a[],int l,int r)
{
    int m=(l+r)/2,k=0;
    for(int i=l;i<m;i++){
        swap(&a[i],&a[r+l-i-1]);
    }
    while(a[l+k]=='0')k++;
    if(l+k==r)printf("0");
    else
        for(int i=l+k;i<r;i++)
            printf("%c",a[i]);
}

int reverse_small(char a[],int l,int r)  // 反转小数点后的数字
{
    int m=(l+r)/2,k=0;
    for(int i=l;i<m;i++){
        swap(&a[i],&a[r+l-i-1]);
    }
    while(a[r-k-1]=='0')k++;
    if(r-k==l)printf("0");
    else
        for(int i=l;i<r-k;i++)
            printf("%c",a[i]);
}

int main()
{
    char a[100]={};
    scanf("%s",a);
    int n=strlen(a);
    for(int i=0;i<n;i++){
        if(a[i]=='.'){
            reverse(a,0,i);
            printf(".");
            reverse_small(a,i+1,n);
            break;
        }
        if(a[i]=='/'){
            reverse(a,0,i);
            printf("/");
            reverse(a,i+1,n);
            break;
        }
        if(a[i]=='%'){
            reverse(a,0,i);
            printf("%%");
            break;
        }
        if(i==n-1)
            reverse(a,0,n);
    }



}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值