手动模拟化分数为小数并输出
来自紫书的习题2-5分数化小数
题面是:
输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b <= 10^6, c <= 100
输入包含多组数据,结束标记为a=b=c=0
样例输入:1 6 4
0 0 0
样例输出:
Case 1: 0. 1667
本题需要考虑的是若小数点超过了double的16位该怎么办
根据除法可以得知,小数点的每一位都是商,不过是放大后再被除数相除而已
故我们可以这么办:
拿a=1,b=6为例
1/6的第一个结果是1/6 = 0...1
我们可以知道1/6是得不到整数位的商
故其可以从其小数位开始,每一位都所得余数皆*10作为下一位的被除数,直至余数为0
代码如下:
#include<stdio.h>
int g = 1;
int main()
{
	int a, b, c;
	while(scanf("%d %d %d", &a, &b, &c) != 	EOF){
		if(a == 0 && b == 0 && c == 0)
			break; 
		int t = 0;
		printf("Case %d: %d.", g++, a / b); 
		while(t++ <= c){
			a = a % b * 10;
			
			printf("%d", a / b);
		}
		printf("\n");
	}
	return 0;
}  总感觉哪里怪怪的,如果有大佬能看出来哪里有错,欢迎指教
 投递中国邮政储蓄银行等公司10个岗位
投递中国邮政储蓄银行等公司10个岗位
 查看20道真题和解析
查看20道真题和解析