C语言问题在线等

本题目求输入三个正整数,前两个整数做除法,第三个数是精确的小数点位数,如果数据读入有误,输出:data input error
输入格式:
在一行中输入3个正整数m,n,d,用空白分开,m,n,d均小于等于300000.
输出格式:
输出m/n的对应的结果,精确到小数点后d位

#include <stdio.h>
#include <stdlib.h>

int main()
{
int m,n,d; //保存输入参数
int zh,yu,ct; //分别保存 m/n的整数部分,计算中的余数部分,小数位数
char *buff,*p; //小数部分字符串,指向字符串最后一个空字符的指针

scanf("%d %d %d",&m,&n,&d);

if(n == 0)
{
printf("data input error\r\n");
exit(0);
}

zh = m / n;
yu = (m % n )* 10; //取余*10
buff = (char*) malloc( d + 1 ); //申请空间

ct = 0;
p = buff;
while(ct < d)
{
*p++ = '0' + yu / n;
yu = ( yu % n ) * 10;

ct++;
*p = 0;
}
printf("%d/%d=%d.%s\r\n",m,n,zh,buff);

if(buff)
free(buff);
return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2017-12-24
第一个1^2/(1*3)有问题吧
感觉应该是2^2/(1*3)
按照我的想法的代码如下:
# include

int main()
{
int k = 10, i; //自己定义K的大小,修改一下数字即可
double result = 1;
for(i=1; i<=k; i++)
{
result *= ((i*2.0)*(i*2.0)) / ((2.0*i-1.0) * (2.0*i+1.0));
}
printf("%lf\n", result);
return 0;
}
第2个回答  2017-12-24
#include<stdio.h>
int main()
{int m,n,d,i;
scanf("%d%d%d",&m,&n,&d);
if(n==0||d<0||d>300000)
{printf("data input error");
 return 0;
}
printf("%d",m/n);
if(d)printf(".");
m=m%n*10;
for(i=0;i<d;i++)
{printf("%d",m/n);
 m=m%n*10;
}
return 0;
}

相似回答