OpenJudge百炼-2737-大整数除法-C语言-高精度计算
2017-08-14 16:44
561 查看
描述:
求两个大的正整数相除的商。
输入:
第1行是被除数,第2行是除数。每个数均不超过100位。
输出:
一行,相应的商的整数部分
样例输入:
2376
24
样例输出:
99
求两个大的正整数相除的商。
输入:
第1行是被除数,第2行是除数。每个数均不超过100位。
输出:
一行,相应的商的整数部分
样例输入:
2376
24
样例输出:
99
/*********************************************** **文件名:百炼-2737 **Copyright (c) 2015-2025 OrdinaryCrazy **创建人:OrdinaryCrazy **日期:20170813 **描述:百炼2737参考答案 **版本:1.0 ************************************************/ /*********************************************** 基本的思想就是反复做除法,看看从被除数里最多能减去多少个除数 ************************************************/ #include <stdio.h> #include <string.h> int dividend[100],divisor[100],quotient[100],len1,len2; char line1[101],line2[101]; /*************************************************** 长度为lenn1的大整数p1减去长度为lenn2的大整数p2 减得结果放在p1里返回值代表结果的长度,不够减返回-1,正好剪完返回0 ****************************************************/ int substract(int* p1,int* p2,int lenn1,int lenn2) { int i; if(lenn1 < lenn2) return -1; if(lenn1 == lenn2) for(i = lenn1-1;i>=0;i--) { if(p1[i] > p2[i]) break; else if(p1[i] < p2[i]) return -1; else continue; } for(i = 0;i < lenn1;i++) { p1[i] -= p2[i]; if(p1[i] < 0) { p1[i] += 10; p1[i+1]--; } } for(i = lenn1-1;i >= 0;i--) if(p1[i]) break; return i+1; } int main() { int i,j; gets(line1); gets(line2); len1 = strlen(line1); len2 = strlen(line2); for(i = len1-1,j = 0;i >= 0;i--,j++) dividend[j] = line1[i] - '0'; for(i = len2-1,j = 0;i >= 0;i--,j++) divisor[j] = line2[i] - '0'; len1 = substract(dividend,divisor,len1,len2); if(len1 == -1) { printf("0"); return 0; } if(len1 == 0) { printf("1"); return 0; } quotient[0]++; int times = len1 - len2; for(i = len1-1;i >= 0;i--) { if(i >= times) divisor[i] = divisor[i - times]; else divisor[i] = 0; } len2 = len1; for(j = 0;j <= times;j++) { int tmp; while((tmp = substract(dividend,divisor+j,len1,len2-j)) >= 0) { len1 = tmp; quotient[times-j]++; } } for(i = 0;i < 99;i++) if(quotient[i] >= 10) { 4000 quotient[i+1] += quotient[i]/10; quotient[i] %= 10; } i = 99; while(!quotient[i] && i >=0) i--; if(i == -1) printf("0"); else while(i >= 0) printf("%d",quotient[i--]); return 0; }
相关文章推荐
- OpenJudge百炼-2981-大整数加法-C语言-高精度计算
- OpenJudge百炼-2809-计算2的N次方-C语言-高精度计算
- 高精度计算-大整数除法
- OpenJudge百炼-2952-循环数 & poj-1047-Round and Round We Go-C语言-高精度计算
- OpenJudge百炼-2706-麦森数-C语言-高精度计算
- OpenJudge百炼-2764-数根-C语言-高精度计算
- OpenJudge百炼-2951&PKU-1001-浮点数高精度幂-C语言-高精度计算
- 计算两个整数相除,不能用除法和取余
- 警报C++精密整数除法计算损失
- 九度OJ-1198 高精度整数计算
- 计算整数中1的个数的C语言实现
- 高精度整数除法(MIPS汇编)
- BigDecimal 高精度计算 熟悉扩展,java除法保留小数问题
- C语言实现整数四则运算表达式的计算
- 华为机试:无线OSS-高精度整数加法、矩阵乘法计算量估算
- 接口完备的高精度整数计算类
- 高精度计算-大整数乘法
- 7、大数,高精度计算---大数除法
- c语言实现加法器,高精度计算a + b
- C语言如何不用除法取出整数中的一位数?