逆转数(指针专题)
任意给你一个整数,这个数可能很大(最长不超过100位),你能求出它的逆转数吗?
逆转数定义如下:
1.一个末尾没有0的整数,它的逆转数就是各位数字逆序输出;
2.一个负数的逆转数仍是负数;
3.一个末尾有0的整数,它的逆转数如同下例:
reverse (1200) = 2100
reverse (-56) = -65
要求定义并使用如下函数:
void reverse(char *str)
{
//函数求出str的逆转数并存入str。
}
输入
输入一个长整数str,不超过100位,输入的整数不含前导0。
输出
输出str的逆转数。输出占一行。
样例输入 Copy
-123456789000
样例输出 Copy
-987654321000
此代码显示编译错误
#include <stdio.h>
#include <string.h>
void reverse(char *str);
int main(){
char s[100];
gets(s);
reverse(s);
return 0;
}
void reverse(char *str) {
int len1 = strlen(str);
int i;
char _s[100];
if(str[len1-1]!='0'&&str[0]!='-'){//正数末尾且不为0
// printf("%c %c\n",str[len1-1],str[0]);
strrev(str);
puts(str);
}
else if(str[len1-1]!='0'&&str[0]=='-'){ //负数且末尾不为0
strrev(str);
str[len1-1]='\0';
_s[0]='-';
strcat(_s,str);
puts(_s);
}
else if(str[len1-1]=='0'){//末尾为0
int cnt=0;//记录0的个数
for(i=len1-1; i>=0; i--){
if(str[i]=='0'){
str[i]='\0';
cnt++;
}
else
break;
}
strrev(str);
if(str[i]=='-'){//负数时 ,为str[i]最后一位
str[i]='\0';
_s[0]='-';
}
strcat(_s,str);
int len2 = strlen(_s);
for(i=0; i<cnt; i++){
_s[len2+i]='0';
_s[len2+i+1]='\0';
}
puts(_s);
}
}
此代码显示时间超限
#include <stdio.h>//逆转数
#include <string.h>
#include <stdlib.h>
#define N 100
void reverse(char *str);
int main(){
// char str[N];
// gets(str);
char *p = (char*)malloc(sizeof(char)*N);
gets(p);
reverse(p);
free(p);
return 0;
}
void reverse(char *str){
int len = strlen(str);
int i;
int cnt=0,flag=0;
if(str[0]=='-'){
printf("-");
}
for(i=len-1; i>=1; i--){
if(str[i]=='0'&&flag==0){
cnt++;
continue;
}
if(str[i]!='0'||flag!=0){
flag=1;
printf("%c",str[i]);
}
}
if(str[0]!='-'){
printf("%c",str[0]);
}
for(i=0; i<cnt; i++){
printf("0");
}
}
此代码显示时间超限
#include <stdio.h>//逆转数
#include <string.h>
#define N 100
void reverse(char *str);
int main(){
char str[N];
gets(str);
reverse(str);
puts(str);
return 0;
}
void reverse(char *str){
int left,right,i,j,len;
len = strlen(str);
if(str[0]=='-'){
left=1;//记录左侧不为负号的第一个下标
}
else
left=0;
for(i=len-1; i>=1; i--){
if(str[i]!='0'){
right=i;//记录右侧不为0的第一个下标
break;
}
}
while(left<right){//交换
char t=str[left];
str[left]=str[right];
str[right]=t;
left++;
right--;
}
}