设计思路:
- 数字的正负号决定输出普通数字的正负
- 指数的正负号决定小数点的移动
编译器:C (gcc)
#include <stdio.h>
#include <string.h>
int movepoint(char n[], int index);
int rightprint(char n[], int index);
int main()
{
int index;
char n[10003] = {'\0'};
scanf("%[^E]E%d", n, &index);
if(n[0] == '-') printf("-");
if(index >= 0){
movepoint(n, index);
printf("%s\n", n+1);
}
else{
printf("0.");
for(index++; index; index++){
printf("0");
}
printf("%c%s\n", n[1], n+3);
}
return 0;
}
int movepoint(char n[], int index)
{
char *p = n+2;
for(; index; index--){
if(*(p+1) != '\0') *p = *(p+1);
else *p = '0';
p++;
*p = '.';
}
if(*(p+1) == '\0') *p = '\0';
return 0;
}
int rightprint(char n[], int index)
{
char *p = n+1;
putchar(*p);
for(p += 2; index; index--){
putchar(*p ? *p++ : '0');
}
if(*p)
{
putchar('.');
while(*p) putchar(*p++);
}
}