本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。
输入格式:
输入在1行中依次给出A和B,中间以1空格分隔。
输出格式:
在1行中依次输出Q和R,中间以1空格分隔。
输入样例:123456789050987654321 7输出样例:
17636684150141093474 3
这个是自己做的,但只拿了18
/*
分为两种情况
1:当前位大于 b,例如 45/2, 4大于2
2:当前位小于 b
*/
#include <iostream>
using namespace std;
int main()
{
string a;
int b;
cin >> a >> b;
string q; //存放商
int r = 0; //存放余数
int i = 0, k = 0, num, p=0;
while(i < a.size()){
num = r*10 + a[i]-'0'; //当前位为 前一位的余数*10+当前位
if(num >= b){
k = num/b; //商
r = num%b; //余数
q += (k+'0');
p = 1;
i ++;
}
else{
if(p) q+=(0+'0'); //判断是否为第一位
k = ((a[i]-'0')*10 + (a[i+1]-'0'))/b;
r = ((a[i]-'0')*10 + (a[i+1]-'0'))%b;
if(i == a.size()-1) r = a[i]-'0'; //判断是否为最后一位
else q += (k+'0');
p = 1;
i = i + 2;
}
}
cout<<q<<" "<<r;
return 0;
}
下面的是20的
#include <iostream>
#include <string>
using namespace std;
int main()
{
string a;
int b, i, first = 0, temp = 0;
cin >> a >> b;
for(i = 0; i < a.length(); i++)
{
temp = temp*10 + a[i] - 48;
if(temp >= b)
{
cout << temp/b;
first = 1;
}
else if(first) cout << 0;
temp = temp%b;
}
if(first == 0) cout << 0;
cout<< " " << temp << endl;
system("pause");
return 0;
}