题目:计算A / B,其中A是不超过1000位的正整数,B是1位正整数。
要求:需要输出商数Q和余数R,使得A=B×Q+R成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
思路:用字符串接收A,然后将其各位都转换为整数并保存到数组中。从前往后除B,得到结果,保存在原数组中。
代码:
#include<iostream>
#include<string>
using namespace std;
int main(){
string s;cin >> s; // 被除数
int s_len = s.size();
int * arr = new int[s_len];
for(int i = 0 ; i < s_len ; i ++) arr[i] = s[i] - '0';
int b;cin >> b; // 除数
int t = 0; // 余数
for(int i = 0 ; i < s_len ; i ++){
t = t * 10 + arr[i];
if(t >= b){
arr[i] = t / b;
t = t % b;
}else{
arr[i] = 0;
}
}
int tag = 0; // 不输出前导零
for(int i = 0 ; i < s_len ; i ++){
if(!(arr[i] == 0 && tag == 0)){
cout << arr[i];
tag = 1;
}
}
if(tag == 0) cout << "0";
cout << " " << t << endl;
return 0;
}
注:本文代码参考B站视频。
【【从0开始的C++算法课】第07期 | 高精度运算 & 高精度除法运算(上) | 单精度数除以单精度数商为高精度|高精度数除以单精度数|大数除法原理以及代码实现】 https://www.bilibili.com/video/BV1uwk3Y8ERW/?share_source=copy_web&vd_source=bdad21ac85b0bc644dc04c1931553eae