小数形式与科学计数法转换c语言,BUAA小数形式与科学计数法转换(简)
如果你來自BUAA,記得別復制
【問題描述】
編寫一個程序,將用小數表示的浮點數,轉換成科學計數法的形式輸出。輸入的數據沒有符號,小數點前后必有數字,且全為有效數據,即小數點后的末尾數字不為0;小數點前若只有一位數字,可以為0,否則小數點前的最高位數字不為0。
提示:以字符串形式保存相關數據。
【輸入形式】
從控制臺輸入一小數,最后有回車換行符,所有輸入的字符數不會超過100。
【輸出形式】
以科學計數法形式輸出數據。輸出的數據由以下幾部分構成:
1.底數部分是一個小數或整數,若為小數,則小數點前后必有數字,而且都為有效數字。即:小數點前只有一位大于0的數字,小數點后的末尾數字不能為0。若為整數,則只有一位數字,不帶小數點。
2.必有小寫字母“e”。
3.指數部分是一個整數,若大于等于0,則不帶正號“+”。若小于0,則需要帶負號“-”,且整數的最高位數字不為0。
【輸入樣例1】
0.000000000000002
【輸出樣例1】
2e-15
【輸入樣例2】
8.9845623489651700659
【輸出樣例2】
8.9845623489651700659e0
【輸入樣例3】
367298599999093453490394859509568659795603.4
【輸出樣例3】
3.672985999990934534903948595095686597956034e41
【樣例說明】
以小數形式輸入數據,然后轉換成科學計數法形式輸出。
#include
#include
#include
char str[105];
int main()
{
fgets(str, 104, stdin);
int spot_count = 0, numb_start = 0, length = strlen(str);
for (int i = 0; i < length - 1; i++)
{
if (str[i] == '0')
continue;
if (str[i] != '0' && str[i] != '.')
{
if (numb_start != 0)
continue;
numb_start = i + 1;
if (str[0] == '0')
numb_start = i - 1;
}
if (str[i] == '.')
spot_count = i - 1;
}
if (str[0] == '0')
{
if (numb_start + 2 >= length - 1)
printf("%c", str[numb_start + 1]);
else
printf("%c.", str[numb_start + 1]);
for (int i = numb_start + 2; i < length - 1; i++)
{
printf("%c", str[i]);
}
printf("e-%d", abs(numb_start - spot_count));
}
// printf("%d %d", spot_count, numb_start);
if (str[0] != '0')
{
printf("%c.", str[numb_start - 1]);
for (int i = numb_start; i < length - 1; i++)
{
if (str[i] == '.')
continue;
printf("%c", str[i]);
}
printf("e%d", abs(numb_start - spot_count - 1));
}
return 0;
}
總結
以上是生活随笔為你收集整理的小数形式与科学计数法转换c语言,BUAA小数形式与科学计数法转换(简)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在java中goto是意思,关于Java
- 下一篇: Express 入门之Router -