题目描述:
1017 A除以B (20 分)
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
首先理一下思路,想一下我们平时是如何做除法运算的。
假设当前数字为234,用5去除
第一轮 :2不能被5除尽,我们商0余2 (这里需要考虑特殊情况,如数字为3,用5除)
第二轮:由于上一轮余了2,在这里就变成了2*10+3 = 23,即23/5商4余3
以此类推.........
可以总结出来规律:
int temp = (arr[i]+reminder*10)/num;
reminder = (arr[i]+reminder*10)%num;
实现代码如下:
//A除以B
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(){
string str;
int num;
cin>>str;
cin>>num;
int arr[str.length()]; //将字符串内的数字转换为整形,存入数组
for(int i=0;i<str.length();i++){
arr[i] = str[i]-48;
}
vector<int> ans; //将最终结果存入容器
int reminder = 0;
for(int i=0;i<str.length();i++){
if(i==0){ //第一轮
int temp = arr[i]/num;
reminder = arr[i]%num;
ans.push_back(temp);
}else{
int temp = (arr[i]+reminder*10)/num;
reminder = (arr[i]+reminder*10)%num;
ans.push_back(temp);
}
}
int begin = 0;
if(ans[0]==0&&ans.size()!=1){ //这里做一个特殊的判断,如果整数只有一位,则0需要输出
begin = 1;
}else if(ans[0]==0&&ans.size()==1){
}
for(begin;begin<ans.size();begin++){
cout<<ans[begin];
}
cout<<" "<<reminder<<endl;
return 0;
}