生活随笔
收集整理的這篇文章主要介紹了
【PAT B1024】科学计数法(C语言)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這一位大佬的代碼很厲害
這是地址
要保留所有有效數字,若是正數,前面的正號不輸出。
#include <stdio.h>
#define MAX_A 10000
char A
[MAX_A
];
int pos_E
;
int e
;
char flag_E
;
int read_A();
int read_cal_E();
int print_A();
int point_forward();
int point_back();
int print_m_n(int m
, int n
);
int print_0(int x
);
int read_A(){int c
;for(pos_E
= 0; (c
= getchar()) != 'E'; ++pos_E
)A
[pos_E
] = c
;read_cal_E();
}
int read_cal_E(){int i
, j
;int c
= 0;int exp
[4] = {0}; flag_E
= getchar(); for(i
= 0; (c
= getchar()) != '\n'; ++i
)exp
[i
] = c
- '0';for(--i
, j
= 1; i
>= 0; --i
,j
*= 10)e
+= j
*exp
[i
];return 0;
}
int print_A(){if(A
[0] == '-')putchar(A
[0]);if(flag_E
== '-') point_forward();else point_back();return 0;
}
int point_forward(){if(e
> 0 ){ printf("0.");print_0(--e
); printf("%c", A
[1]); print_m_n(3, pos_E
);}else print_m_n(1, pos_E
);return 0;
}
int point_back(){int i
;if(e
== 0)print_m_n(1, pos_E
);else if(e
> 0 && e
< (pos_E
- 3)){printf("%c", A
[1]); print_m_n(3, 3+e
);printf(".");print_m_n(3+e
, pos_E
);}else if(e
>= (pos_E
- 3)){printf("%c", A
[1]);print_m_n(3, pos_E
);print_0(e
- (pos_E
- 3));}
}
int print_m_n(int m
, int n
){for(; m
< n
; ++m
)printf("%c", A
[m
]);return 0;
}
int print_0(int x
){for(; x
> 0; --x
)printf("0");return 0;
}
int main(){read_A(); print_A(); return 0;
}
總結
以上是生活随笔為你收集整理的【PAT B1024】科学计数法(C语言)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。