Loading... 高精除以低精。输入两个正整数,求他们的商(做整除)。 【算法分析】 做除法时,每一次的商的值都在0 ~ 9,每次求得的余数连接以后的若干位得到新的被除数,继续做除法。因此,在做高精度除法时,要涉及到乘法运算和减法运算,还有位移处理。当然,为了 程序简洁,可以避免高精度乘法,用0 ~ 9次循环减法取代得到商的值。这里,我们讨论一下高精度除以单精度数的结果,采取的方法时按位相除法。 * 高精除以低精的参考程序 ```C #include<iostream> #include<cstring> #include<cstdio> using namespace std; int main(void) { char a1[100]; int a[100], c[100], lena, i, x = 0, lenc, b; memset(a, 0, sizeof(a)); memset(c, 0, sizeof(c)); gets_s(a1); cin >> b; lena = strlen(a1); for (i = 0; i <= lena-1; i++) { a[i + 1] = a1[i] - '0'; } for (i = 1; i <= lena; i++) //按位相除 { c[i] = (x * 10 + a[i]) / b; x = (x * 10 + a[i]) % b; } lenc = 1; while (c[lenc] == 0 && lenc < lena) { lenc++; //删除前导0 } for (i = lenc; i <= lena; i++) { cout << c[i]; } cout << endl; return 0; } ``` <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-0356f41152e7258a0c255ff14b9412e582" aria-expanded="true"><div class="accordion-toggle"><span style="">典例</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-0356f41152e7258a0c255ff14b9412e582" class="collapse collapse-content"><p></p> **题目:1017 A除以B (20 分)** 本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。 ### 输入格式: 输入在一行中依次给出 A 和 B,中间以 1 空格分隔。 ### 输出格式: 在一行中依次输出 Q 和 R,中间以 1 空格分隔。 ### 输入样例: ```in 123456789050987654321 7 ``` ### 输出样例: ```out 17636684150141093474 3 ``` <p></p></div></div></div> <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-323717d2e1deb39c9658743b574d338f86" aria-expanded="true"><div class="accordion-toggle"><span style="">答案</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-323717d2e1deb39c9658743b574d338f86" class="collapse collapse-content"><p></p> ```cpp #include<bits/stdc++.h> using namespace std; int main() { char a1[1001]; int a[1001],c[1001],lena,i,x=0,lenc,b; cin>>a1; cin>>b; lena=strlen(a1); for(int i=0;i<=lena-1;i++) { a[i+1]=a1[i]-'0'; } for(int i=1;i<=lena;i++) { c[i]=(x*10+a[i])/b; x=(x*10+a[i])%b; } lenc=1; while(c[lenc]==0&&lenc<lena) { lenc++; } for(i=lenc;i<=lena;i++) cout<<c[i]; cout<<" "<<x; return 0; } ``` <p></p></div></div></div> 最后修改:2021 年 09 月 12 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏