#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