PAT+1017+A除以B
来源:互联网 发布:淘宝香水正品店推荐 编辑:程序博客网 时间:2024/05/22 04:35
- A除以B (20)
本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。
输入格式:
输入在1行中依次给出A和B,中间以1空格分隔。
输出格式:
在1行中依次输出Q和R,中间以1空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
百度到两种解法,一个满分,一个部分正确,大家一起来看一看有什么问题。
1.这个是部分正确,得分18分
#include <iostream>#include <string>using namespace std;int main(void){ string A; int B; string res; // Q除数 R余数 divior商 int Q, R = 0, divior; cin>>A>>B; for(int i = 0; i < A.size(); ++i) { Q = 10 * R + A[i] - '0'; divior = Q / B; R = Q % B; if(!res.empty() || divior != 0) //res不为空,或者商不等于0 { res.push_back(divior + '0'); } } cout<<res<<" "<<R<<endl; return 0;}
2.这个是20分满分
#include <iostream>#include <string>using namespace std;int main(){ string A;//表示被除数 int B;//表示除数 int temp = 0, p = 0; cin >> A >> B; for (int i=0; i<A.length(); i++ ) { temp = temp*10 + A[i] - '0';//每次用temp除以B,下一循环自动更新temp的值 if ( temp >= B )//判断是否大于除数B ,成立则输出商的第一位 { cout << temp/B; p = 1;//第一位输出后用p标记 } else if (p) { cout << "0";//第一位输出后且temp<B,则后移一位,商0 } temp %= B;//得到余数 } if ( p == 0 ) cout << "0"; cout << " " << temp << endl; return 0;}
这两种解法我都学习到很多,此题的因为被除数范围太大,所以用字符串表示被除数,按照小学学过的基本除法规则的思路进行计算。但是我不知道第一种解法得18分问题出在哪里了。
0 0
- PAT+1017+A除以B
- A除以B,PAT,1017
- PAT 1017A除以B
- PAT B 1017 A除以B (20)
- PAT A除以B
- PAT-A除以B
- PAT basic 1017 : A除以B
- ZJU PAT 1017 A除以B
- PAT 乙级 1017 A除以B (20)
- PAT BASIC 1017 A除以B
- PAT乙级1017 A除以B
- PAT 1017. A除以B
- PAT 1017. A除以B
- PAT乙级-A除以B
- PAT练习-A除以B
- PAT B1017. A除以B
- PAT 1017. A除以B
- PAT-B 1017. A除以B
- 《JavaFX应用程序添加HTML内容》-更新内容
- 沉浸式状态栏4.4及5.0以上通用
- 字符串处理://在母串中查找子串,只保留子串之后的数据
- 新的开始
- Linux系统进程间通讯-信号
- PAT+1017+A除以B
- static通俗演义
- 应用程序调试(二)————使用GDB来调试应用程序
- Android线程的创建与销毁
- RF中变量基础使用
- 二叉树之创建与遍历
- 自动化测试和工具
- jq ajax成绩单获取显示
- http://blog.sina.com.cn/s/blog_5e42f31a010156z4.html