继续求助(;∀;)不知道是不是输出格式的问题
查看原帖
继续求助(;∀;)不知道是不是输出格式的问题
1167976
P_udding楼主2024/5/18 19:54

写的乱,所以稍微加了点注释(知道可以用函数,但是之后再学一下..太久了不会用了)

#include <stdio.h>
#include <stdlib.h>
int main()
{
    char a[20]={'\0'};//所有字符
    gets(a);
    char b[20]={'\0'};//符号前的字符
    char c[20]={'\0'};//符号后
    int t=0;//分类下符号,字符前0,小数点和分号1,百分号2
    char g;//符号
    int i=0;
    int r=0;
    for(;i<20;i++){
        if(t==0&&a[i]!='.'&&a[i]!='/'&&a[i]!='%'){
            b[i]=a[i];//把字符前的放到b
        }
		if(t==1){
            c[r++]=a[i];//字符后的放到c
        }
        if(a[i]=='.'||a[i]=='/'){
            t=1;
            g=a[i];
        }else if(a[i]=='%'){
        	t=2;
		}
    }
    char d[20]={'\0'};
    int j=0;
    int f=1; //用来判断0是位于字符前还是字符中间
    if(atoi(b)==0){
    	printf("%c",'0');//考虑字符前全为0
	}else{
		for(;i>=0;i--){  //字符前不为0
	        if(b[i]!='\0'){   //不考虑前面0
	        	if(b[i]!='0'){
		            d[j]=b[i];
		            j++;
		            f=0;
		        }else if(f==0){
		        	d[j]='0';
		        	j++;
				}
	        }
	    }
	}
    int m=0;//记录字符后尾部0位置
    f=1;
    if(t==1){   
    	if(atoi(c)==0){   //字符后全为0
    		a[j++]=g;
    		a[j]='0';
		}else{
			d[j++]=g;
	        for(i=19;i>=0;i--){
	        	if(c[i]=='0'&&f==1&&g=='/'){  //分号时不需要字符前0
	        		continue;
				}
	            if(c[i]!='\0'){	 
					if(c[i]!='0'){
						f=0;
						m=j+1;
					}
					d[j]=c[i];
	                j++;
	            }       
	        }
	        if(g=='.'){   //小数点时
	        	for(;m<20;m++){  //让字符后0变成空字符
		    		d[m]='\0';
		    	}
			}
		}
    }
    printf("%s",d);
    if(g=='.'&&atoi(c)==0){
    	printf("%c%d",g,0);  //发现1.0会输出1所以补的...
	}
    if(t==2){
    	printf("%c",'%');
	}
    return 0;
}

下载了第一个,输入输出都一样,还是WA

2024/5/18 19:54
加载中...