re怠惰的未禾 2022-03-19 21:03 采纳率: 75%
浏览 31
已结题

逆转数,提交网站时显示编译错误,求解,

逆转数(指针专题)

任意给你一个整数,这个数可能很大(最长不超过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--;
    }
    
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 3月27日
    • 修改了问题 3月20日
    • 修改了问题 3月20日
    • 修改了问题 3月20日
    • 展开全部

    悬赏问题

    • ¥35 navicat将excel中的数据导入mysql出错
    • ¥15 rt-thread线程切换的问题
    • ¥20 python忆阻器数字识别
    • ¥15 高通uboot 打印ubi init err 22
    • ¥20 PDF元数据中的XMP媒体管理属性
    • ¥15 R语言中lasso回归报错
    • ¥15 网站突然不能访问了,上午还好好的
    • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
    • ¥15 semrush,SEO,内嵌网站,api
    • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊