c语言大神求破。。。 输入一个实型数,输出它整数部分的位数。
发布网友
发布时间:2022-05-01 16:52
我来回答
共5个回答
热心网友
时间:2022-06-19 20:23
将这个浮点数强制为整型赋给一个int型变量,然后用10去除这个int型变量,几次能除到结果为0就是几位。代码如下:
#include "stdio.h"
int main(int argc,char *argv[]){
int n,t;
double x;
printf("Input x(float,x>=0)...\nx=");
if(scanf("%lf",&x)!=1 || x<0 || x>0x7FFFFFFF){//非负整型范围内
printf("Input error, exit...\n");
return 0;
}
for(n=(int)x,t=0;n;n/=10,t++);//n是整数部分,t记录位数
printf("The integer part of %g is(are) %d digit(s).\n",x,t);
return 0;
}
运行样例如下:
热心网友
时间:2022-06-19 20:24
void main(){
float a;
int b,c;
scanf("%f",&a); //输入一个实数存在a变量中
b=a; //强制转换,直接把浮点数变量的值赋给整数变量,直接得到整数部分
for(int i=1,c=b;c<10;i++){ //备份整数部分到c变量,如果c变量的值小于10,那说明已经算出整数 //部分的个数了。i变量的值就是整数部分的位数
c/=10; //c=c/10; 以变量的值除于10,得到的整数部分再赋给c变量,执行完这句后,c的 //值就不再是b了
}
printf("输入的实数为%f,整数部分为%d, 整数部分的位数为%d",a,b,i);
}追问输入的实型数有可能是负数怎么破,比如输入-82.5得到2
追答一样可以啊
热心网友
时间:2022-06-19 20:24
如果你不是新手的话,应该这样做,得到这个实型数例如 是33.456然后强制转换成整数 变成33然后不停地对10取模,知道结果为0退出循环,统计循环的次数,就说明是几位!
#include <stdio.h>
int main(void)
{
//printf("Hello Linux\r\n");
float dNum =0.0;
puts("输入一个实数");
scanf("%f",&dNum);
int num = (int)dNum;
int times = 0;
while(num)
{
times++;
num /= 10;
}
printf("整数位数为%d\r\n",times);
return 0;
}
追问输入的实型数有可能是负数怎么破,比如输入-82.5得到2
追答先变成正数
热心网友
时间:2022-06-19 20:25
#include<stdio.h>
main()
{
double a=0.0;
int b=0;
int i=1;
printf("请输入一个实型数: ");
scanf("%lf",&a);
b=a;
while(b/10>0)
{
i++;
b=b/10;
}
printf("整数的位数是%d\n",i);
}追问输入的实型数有可能是负数怎么破,比如输入-82.5得到2
追答while里面改成b/10!=0,负数也能处理
热心网友
时间:2022-06-19 20:25
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<math.h>
int main()
{
char a[20],i,l,k,n=0;
int m=0;
while(1)
{
printf("请输入一个数!\n");
scanf("%s",a);
n=0;
k=0;
l=0;
for(i=0;i<strlen(a);i++)
{
if(((a[i]>='0')&&(a[i]<='9'))||(a[i]=='.'))//判断输入的只能是数字和小数点
{
if(a[i]=='.') //判断输入的小数点次数,为后面判断小数点输入多了做判断
{
k++;
l=n;
}
n++;
}
}
if(n==strlen(a)&&k<=1)//输入的全部是数字并且最多只有一个小数点
{
printf("你输入的正整数位数为:%d\n", l);
}
else
printf("不全部是数字,有其余字符");
}
}