64,639
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
int pow(int n)//pow为计算10的count次方的函数,count为负时除了方法等同于为0时
{
int i = 10;
if(0 < n)
{
while(--n)
i *= 10;
}
else
i = 1;
return i;
}
int main()
{
float a, b = 0.5;//0.5用于计算上的四舍五入
cout << "输入(float只能确保6位有效数字):";
cin >> a;
/**计算小数部分的有效数字位数*/
int num = a;//取整数部分
int count = 0;
while(num)//确定整数部分的有效数字
{
++count;
num /= 10;
}
//确定小数位数的有效数字
if(0 != count)//整数部分不为 0
count = 6 - count;
else //如果整数部分为 0
{
float tmp = a * 10;
num = tmp;
while(!num)
{
++count;
tmp *= 10;
num = tmp;
};
count += 6;
}
/**四舍五入保证小数部分的精度*/
num = pow(count);//pow为计算10的count次方的函数,count为负时除了方法等同于为0时
b /= num;
if(0 <= a)//四舍五入计算
a += b;
else
a -= b;
/**计算小数位数*/
num *= a;//a * 10^count
while(0 == num % 10)
{
num /= 10;
--count;
}
/**输出*/
cout << "小数位数为:" << count << endl;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
string s;
unsigned int i=0;
int num = 0;
getline(cin,s);
while(s[i]!='.' && i<s.size()){
++i;
}
if(i == s.size())
num = 0;
else{
int j = s.size() - 1;
num = s.size()-i-1;
while(s[j--] == '0')
num--;
}
cout<<num<<endl;
return 0;
}
#include <iostream>
#include <string>
using namespace std;
int main()
{
float a;
char c[10];
int i = 0, j = 0, num = 0;
cin>>a;
sprintf(c,"%f",a);
while(c[i++]!='.')
;
j = strlen(c)-1;
while(c[j] == '0')
--j;
num = j - i + 1;
cout<<num<<endl;
return 0;
}