输入正整数a,b,c,输出a/b的小数形式,精确到小数点后c位。a,b≤106,c≤100。输 入包含多组数据,结束标记为a=b=c=0。 样例输入: 1 6 4 0 0 0 样例输出: Case 1: 0.1667
#include <stdio.h> #define MAX_LENGTH 120 //计算商 int GetFactor(int a, int b){ return a/b; } //计算余数 int GetRemainder(int a,int b){ return a-(a/b*b); } //是否整除 bool IsAliquot(int a, int b){ bool ret = false; if(a%b==0) { ret=true; } return ret; } //模拟竖式计算 void Division(int a, int b, int precision, int ans[MAX_LENGTH]) { if(precision > MAX_LENGTH) { return; } int i=0; for(i=0; i<MAX_LENGTH; i++) { ans[i] = 0; } int calA = a, calB = b; ans[0] = GetFactor(calA, calB); //模拟竖式计算 for(i=1; i<=precision; i++) { if(IsAliquot(calA, calB) == true)//已经整除,不需要再继续进行下去 { break; } calA = GetRemainder(calA, calB); calA *= 10; ans[i] = GetFactor(calA, calB); } } void main() { int ans[MAX_LENGTH] = {0}; int a,b,c; scanf("%d%d%d", &a, &b, &c); if (c > MAX_LENGTH) { return; } //计算 Division(a, b, c, ans); // printf("%d / %d , the answer is:(precision:%d)\n",a, b, c); printf("%d.",ans[0]); int i = 0; for(i=1; i<=c ; i++) { printf("%d",ans[i]); /* if(i==0) { printf(" "); }*/ } printf("\n"); // printf("Calculation finished!\n"); }