输入格式:
形如
a/b 的两个数,其中10<=a<b<100。也就是说,这个小数一定是小于1的正数。
提示:输入是带着两个数中间的“/”的,所以scanf应采用“%d/%d”这样的输入格式。
输出格式:
形如
0.xxxxxxxxx 的小数,小数点后最多200位。输出结束的时候要带着回车换行。如果a/b是一个有限不循环小数,则输出完所有的有效位就可以了,不需要再输出后面的0来凑满200位。
输入样例:
16/19
输出样例: 0.84210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684
#include <stdio.h>
int main()
{
int a, b, i, c;
scanf("%d/%d", &a, &b);
printf("0."); //先输出小数点和0
for(i=0;i<200;i++){
//循环200次,如果是无限小数,输出小数点后200位。
c= (10*a)/b;
//应为是int 型将被除数扩大10倍,保证可以得到小数点后一位数并赋值给c
a = (a*10 ) % b;
//将a扩大十倍并求余,把余数赋值给a为下次计算准备,
printf("%d",c);
if (a==0)
//如果a为零,说明结果为有限小数,此时结果已算出,结束循换。
break;
}
return 0;
}
这道题的思路主要是利用了,在用竖式计算时,在算不尽时,在余数后面补0,(相当是扩大十倍)。