1128: 高精度高精度除法
题目描述
计算n/m的值,设n,m为整数,n的长度小于等于1000,m的长度小于等于15位,要求精确到小数点后500位。如果整数位为零,则省略小数点前的零
输入
两行,每行一个整数
输出
一行,保留500位小数的实数。
样例输入
355
113
样例输出
3.14159292035398230088495575221238938053097345132743362831858407079646017699115044247787610619469026548672566371681415929203539823008849557522123893805309734513274336283185840707964601769911504424778761061946902654867256637168141592920353982300884955752212389380530973451327433628318584070796460176991150442477876106194690265486725663716814159292035398230088495575221238938053097345132743362831858407079646017699115044247787610619469026548672566371681415929203539823008849557522123893805309734513274336
1 #include<cstdio> 2 #include<cstring> 3 char n[1005]; 4 long long temp,m; 5 int main() 6 { 7 bool flag=0; 8 scanf("%s%lld",n,&m); //先输入n为字符串,然后输入m被除数 9 for (int i=0;i<strlen(n);i++)//整数部分的运算 10 { 11 temp=temp*10+n[i]-'0'; //temp表示前一位余下来的加上这一位正常的那个数进行运算 12 if (temp/m!=0) //直到除出来的商有意义则进行运算 13 flag=1; 14 if (flag==1) 15 printf("%d",temp/m);//留下整除出来的商 16 temp%=m;//把余数保留下来进行下一次除法运算 17 } 18 printf("."); 19 for (int i=1;i<=500;i++)//500位小数部分的运算 20 { 21 temp*=10;//首先每一次都要给余数乘十进行运算 22 printf("%d",temp/m);//然后把答案输出 23 temp%=m;//保留余数 24 } 25 return 0; 26 }
***高精度除法
1. 使被除数一位一位的移动去除以除数
2. 保留整数商
3. 留下余数进行下一次运算
4. 小数部分的下一次运算的被除数等于上一位余数的十倍
5. 输出整数商