求助:为什么输出和答案一样却不对呢?
查看原帖
求助:为什么输出和答案一样却不对呢?
914883
shy2757539057楼主2023/8/2 16:51
#include<iostream>
#include<string.h>
using namespace std;

void abstract(int a ,int b,char * arr,char* back){//从arr中提取第a到b位至back
    int j=0;
    for(int i=a;i<=b;i++){
        back[j++]=arr[i];
    }
    back[j]='\0';
}

void intg(char *arr){//把整数逆序输出
    int i=0;
    bool isfirst=1;
    while (arr[i]!='\0')
                i++;
            while(i>=0){
                i--;
                if(i==0&&arr[0]=='0'){
            printf("0");
            return;
            }
                if(arr[i]=='0'&&isfirst){
                    continue;
                }else isfirst=0;
                printf("%c",arr[i]);
            }
}

int main(){
    char arr[22];
    scanf("%s",arr);
    int i=0;//循环指针
    int tag=0;//整数,标记是那种情况
    while(arr[i]!='\0'){
        if(arr[i]=='.'){
            tag=1;//小数
            break;
        }
        if (arr[i]=='/')
        {
            tag=2;//分数
            break;
        }
        if(arr[i]=='%'){
            tag=3;//百分数
            break;
        }
        i++;
    }
    char f[11];
    char b[11];
    switch(tag){
        case 0:{
            intg(arr);
            break;
        }
        case 1:{
            abstract(0,i-1,arr,f);//小数点前的部分
            intg(f);
            printf(".");
            bool isfirst=1;
            int k=0;
            for(int j=i+1;arr[j]!='\0';j++){
                if(arr[j]=='0'&&isfirst){
                    continue;
                }else isfirst=0;
                b[k++]=arr[j];//小数点后的部分,由于要舍弃最后的0所以没有用intg()
            }
            b[k]='\0';
            intg(b);
            break;
        }
        case 2:
            abstract(0,i-1,arr,f);//分数线前的部分
            strcpy(b,arr+i+1);//分数线后的部分
            intg(f);
            printf("/");
            intg(b);
            break;
        case 3:{
            abstract(0,i-1,arr,f);//百分号前的部分
            intg(f);
            printf("%%");
            break;
        }

    }

    return 0;
}

比如第六组: 输入:84754765.322414 输出:56745748.414223

2023/8/2 16:51
加载中...