Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <limits.h>
- struct RoundResult
- {
- long long value;
- int status;
- };
- struct RoundResult iround(long long value, int prec) {
- struct RoundResult st;
- st.status = 0;
- if(prec == 0) {
- st.value = value;
- st.status = 0;
- return st;
- }
- long long p = 1;
- for(int i = 0; i < prec; ++i) {
- p *= 10;
- }
- if(value >= 0) {
- if (value % p < (p/2)) {
- st.value = value / p * p;
- return st;
- } else {
- if ((value) / p * p > LLONG_MAX - p){
- st.value = 0;
- st.status = 1;
- return st;
- }
- st.value = value / p * p + p;
- return st;
- }
- } else {
- p = -p;
- if (value % p >= (p/2)) {
- st.value = value / p * p;
- return st;
- } else {
- if (value/p * p < LLONG_MIN - p) {
- st.value = 0;
- st.status = -1;
- return st;
- }
- st.value = value / p * p + p;
- return st;
- }
- }
- }
- int main(int argc, char *argv[]) {
- long long value;
- int prec;
- scanf("%lld %d", &value, &prec);
- struct RoundResult st = iround(value,prec);
- printf("%lld %d\n",st.value, st.status);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement