题目要求:
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
个人分析:
有两种情况:
一、a数字只有一位数且这一位数小于b,则需要另外考虑。
二、a数字大于数字b。
具体流程:
题目要求a数字小于1000位,于是用字符串数组来存放a数字内容,关于a数组的处理,要用字符和字符串的知识。用字符串数组c来存放运算结果商Q,remain来存储每次的计算的余数和最后的余数R。
需要去除商首位的0,由于b只有一位数,所得结果只会有一位多余的0,于是只要判断第一位数是否为0,是则去除,不是则输出即可。
代码实现:
C/C++
#include<iostream>
#include<string>
using namespace std;
int main(void)
{
string a;
int b;
cin>>a>>b;
int len=a.length();//计算出输入数组的长度
if(len==1&&(a[len-1]-'0')<b)//特殊情况:当a数字只有一位数且这一位数小于b,则需要另外考虑
{
cout<<"0 "<<(a[len-1]-'0')<<endl;
}
else//这是普通情况
{
int temp=(a[0]-'0')/b;
if(temp!=0)
{
cout<<temp;
}
int remain=(a[0]-'0')%b;
for(int i=1;i<len;i++)//从头到尾开始计算,就像是小学的四则运算
{
temp=(a[i]-'0')+remain*10;
cout<<temp/b;
remain=temp%b;
}
cout<<" "<<remain<<endl;
}
}
DevC++运行截图:
运行一:
运行二:
AC截图:
小白嘀嘀咕咕:
本人是编程小白,如果有什么问题,希望各位大佬能够多多指教,我会继续学习,蟹蟹大家。