@1
从被除数中依次取出一位与除数相除,得到一位商和一位余数,然后将余数乘以 10 加上下一位被除数,继续进行除法操作,直到被除数被完全除尽或者达到所要求的精度。
#include <iostream>
#include <cstring>
using namespace std;
const int N = 1010;
char a[N], q[N];
int b, r = 0;
int main()
{
cin >> a >> b;
int len = strlen(a);
for (int i = 0; i < len; i ++ )
{
r = r * 10 + a[i] - '0';
q[i] = r / b + '0';
r %= b;
}
q[len] = '\0';
int i = 0;
while (q[i] == '0') i ++ ;
if (q[i] == '\0') cout << "0 " << r << endl;
else cout << q + i << " " << r << endl;
return 0;
}
在这个示例中,输入包括一个长度不超过 1000 的字符串和一个 1 位正整数,输出商数 Q 和余数 R。程序中使用了一个字符数组 a
存放被除数,一个字符数组 q
存放商数,一个整数 b
存放除数,一个整数 r
存放余数。
程序首先从输入中读入被除数和除数,然后从被除数中依次取出一位进行除法操作。具体来说,每次将余数乘以 10 加上下一位被除数,然后求出商数和新的余数。商数和余数都是一位数,可以直接用整数或字符表示。
除法操作结束后,程序需要输出商数和余数。需要注意的是,可能会存在前导零,需要将其去除。如果商数为零,则需要特判输出 0 和余数。
@2
用字符串模拟除法来实现。具体思路如下:
1.读入被除数和除数,将它们存储为字符串类型。
2.计算出被除数的长度和除数。
3.从被除数的第一位开始往后扫描,将被除数的一部分作为被除数,直到这个被除数小于除数为止。设这个被除数为 sub_num。
4.计算出 sub_num 除以除数的商和余数,将商存储到结果字符串 q 中,余数存储到 sub_num 中。
5.重复步骤3和步骤4,直到被除数的所有位都被处理完毕。此时 sub_num 就是最终的余数。
6.输出商和余数。
#include<iostream>
#include<string>
using namespace std;
int main() {
string a, q, sub_num;
int b, r = 0;
bool first = true;
cin >> a >> b;
for (int i = 0; i < a.size(); i++) {
sub_num += a[i];
int num = stoi(sub_num);
if (num < b && !first) {
q += "0";
} else {
q += to_string(num / b);
sub_num = to_string(num % b);
first = false;
}
}
if (sub_num == "") sub_num = "0";
cout << q << " " << sub_num << endl;
return 0;
}
@3
#include <iostream>
#include <string>
using namespace std;
int main()
{
string a;
int b, len, remainder = 0;
cin >> a >> b;
len = a.size();
string quotient(len, '0'); // 商的初始值为全0字符串
for (int i = 0; i < len; ++i)
{
int dividend = remainder * 10 + a[i] - '0'; // 余数乘以10加上当前位的数字,作为被除数
remainder = dividend % b; // 除法的余数
quotient[i] = dividend / b + '0'; // 计算商,更新商的当前位
}
// 输出结果
int i;
for (i = 0; i < len && quotient[i] == '0'; ++i); // 跳过前导0
if (i == len) cout << "0"; // 特判商为0的情况
else cout << quotient.substr(i);
cout << ' ' << remainder << endl;
return 0;
}
//首先输入被除数和除数,通过字符串存储被除数。在计算商和余数时,从高位到低位依次取出被除数中的每一位,将余数乘以10再加上当前位的数字,作为被除数,进行一次除法运算,求得商和余数。计算得到的商更新到商的对应位上。最后输出结果时,要特判商为0的情况,并去掉商的前导0。