這個要看小數按什麽格式輸入。
如果按%s輸入,也就是按字符串格式輸入,先找到小數點的位置,然後統計下小數點後數字的長度。
具體實現可參考:
#include?<stdio.h>#include?<stdlib.h>
#include?<string.h>
int?main(int?argc,?char*?argv[])
{
char?a[128];
while(scanf("%s",a)!=EOF)
{
if(strstr(a,".")!=NULL)
printf("%d\n",strlen(strstr(a,".")+1));
else?
printf("0\n");
}
system("pause");
return?0;?
}
如果按%f(對應float類型小數)或者%lf(double類型的小數)方式讀入,則需要先去掉整數部分,然後看小數部分壹直乘10減去整數部分,知道等於0,統計,乘了幾次10,但是由於浮點數在計算機中存的並不是準確值,這個往往得不到正確的結果。可以使用sprintf(str,"%g",f);,然後由於f畢竟不是準確值,還是會出現有些問題,源碼如下:
#include?<stdio.h>#include?<stdlib.h>
#include?<string.h>
int?main(int?argc,?char*?argv[])
{
char?a[128];
float?f;
while(scanf("%f",&f)!=EOF)
{
sprintf(a,"%g",f);
if(strstr(a,".")!=NULL)
printf("%d\n",strlen(strstr(a,".")+1));
else?
printf("0\n");
}
system("pause");
return?0;?
}
這是最後壹個已經出現錯誤,所以遇到要精確判斷小數點的位數,最好直接按字符串讀入,這和圖靈機的工作原理暗暗相合。