Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdio.h"
- void func(char*,int,int);
- int main()
- {
- int carry, howlong, dot=0;
- char a[100] = { '\0' };
- while (scanf("%s", a) != EOF&&scanf("%d", &carry) != EOF)
- {
- if (a[0] == '-'&&a[1] == '0'&&a[2]=='\0')
- {
- puts("0");
- continue;
- }
- for (int i = 0; i < 100; i++)
- {
- if (a[i] == '.')
- {
- dot = i;
- howlong = dot + carry + 1;
- if (a[howlong] - '0' >= 5)//過5進位
- {
- if (carry == 0)//四捨五入到第0位
- {
- howlong--;//前一位為小數點
- a[howlong] = '\0';
- }
- a[howlong - 1] ++;
- a[howlong] = '\0';
- howlong--;
- break;
- }
- else //沒過5
- {
- if (carry == 0)
- {
- howlong--;//<<小數點
- a[howlong] = '\0';
- }
- else
- {
- a[howlong] = '\0';
- }
- }
- }
- }
- if (dot == 0)//無小數位元
- {
- puts(a);
- continue;
- }
- for (int i = howlong; i >= 0; i--)
- {
- if (a[i] == 58 && i == 1)//前一位進為第二位
- {
- a[i] = '0';
- if (a[i - 1] == '-')//第一位為負
- {
- a[i - 1] = '1';
- func(a,howlong,dot);
- printf("-");
- puts(a);
- break;
- }
- else if (a[i - 1] == '9')//第一位為9
- {
- func(a,howlong,dot);
- a[i - 1] = '0';
- printf("1");
- puts(a);
- break;
- }
- else//第一位非負非9
- {
- a[i - 1]++;
- func(a,howlong,dot);
- if (dot == 1)
- {
- printf("10");
- break;
- }
- puts(a);
- break;
- }
- }
- else if (a[i] == 58 && a[i - 1]<58 && a[i - 1] >= 48)//前一位進位
- {
- a[i] = '0';
- a[i - 1]++;
- }
- else if (a[i] == 58 && a[i - 1] == '.')//前一位進為且欲小數點
- {
- i--;
- a[i] = '\0';
- a[i - 1]++;
- }
- else
- {
- func(a,howlong,dot);
- if (dot == 1&&a[0]==58)
- {
- puts("10");
- break;
- }
- puts(a);
- break;
- }
- }
- }
- return 0;
- }
- void func(char *address,int howlong,int dot) //刪去尾部多餘之0
- {
- for (int i = 100; i >= 0; i--)
- {
- if (*(address + i) != '0'&&*(address + i) != '\0'&&i<=howlong&&*(address + i) != '.'||i==dot-1)break;
- *(address + i) = '\0';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment