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); } }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/61491.html