- 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;
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.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';
if ( temp >= B )
{
cout << temp/B;
p = 1;
}
else if (p)
{
cout << "0";
}
temp %= B;
}
if ( p == 0 )
cout << "0";
cout << " " << temp << endl;
return 0;
}
这两种解法我都学习到很多,此题的因为被除数范围太大,所以用字符串表示被除数,按照小学学过的基本除法规则的思路进行计算。但是我不知道第一种解法得18分问题出在哪里了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)