通過E的位置來判斷有效位數,從而計算是否加小數點,是否添0等等 E的位置pos,E后面的數字n,具體算出來的式子已再代碼中 也貼一下以前考乙級時候的代碼
#include<iostream>#include<string>using namespace std;int main(){ string str1; getline(cin, str1); int pos = str1.find('E'); int n = stoi(string(str1, pos + 1));//E后面的數字 string str2(str1, 0, pos);//獲得有效數字 str2.erase(2, 1);//去掉小數點 if (n < 0)//小于0,前面添0,注意位置0字符是+/-,所有從位置1開始 { str2.insert(1, -n,'0'); str2.insert(2, 1,'.'); } else if (n >= 0 && n <= pos - 4)//有小數點的情況 { str2.insert(2 + n, 1, '.'); } else//沒有小數點的情況,后面添0(可能正好不用添0) { str2.insert(str2.size(), n - pos + 3, '0'); } if (str2[0] == '+')str2.erase(0, 1);//如果位置0是+,則舍之 cout << str2<<endl;}#include<stdio.h>#include<string.h>#include<stdlib.h>#PRagma warning(disable:4996)int main(){ char flag,a[10000], b[10000], x; int i=0, K; flag = getchar(); a[0] = getchar(); getchar(); a[1] = '/0'; while ((x = getchar()) != 'E') b[i++] = x; b[i] = '/0'; scanf("%d", &K); K++; strncat(a, b,10000); if (K <= 0) { if (flag == '-') putchar('-'); printf("0."); for (i = -K;i > 0;i--) putchar('0'); puts(a); } else if( K > 0 && K <(int)strlen(a)) { for (i = strlen(a)+1;i > K;i--) { a[i] = a[i - 1]; } a[i] = '.'; if (flag == '-') putchar('-'); puts(a); } else { if (flag == '-') putchar('-'); printf("%s", a); K = K - strlen(a); for (;K > 0;K--) putchar('0'); putchar('/n'); } return 0;}新聞熱點
疑難解答