问题一:解决数组的越界问题
被除数作为高精度数,在进行相除仍然需要以字符串的形式,相除后存在数组里,与之不同的是大数在存入数组时不需要进行反转,直接存入即可。
问题二:计算结果数组长度
高精度除以低精度结果最多与高精度的位数相同,因此结果数组的长度与高精度数的长度相同即可。
问题三:内部除法计算
根据乘法的竖式,在每一位上的数等于上一位的余数乘10加上该位上的数字,再除以除数。而每一次除法运算得到的余数等于上一位的余数乘10加上该位上的数字对除数取模。
问题四:去除多余的零
由于数组并不是倒叙的,所以从第一位开始看,如果是0,则跳过,从下一位开始打印。
问题五:打印数组
正序打印即可。
代码如下:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
string s;
int a[101], c[101];
void strintoint(string str,int des[])
{
for (int i = 0; i <= str.size(); i++)
{
des[i+1] = str[i] - '0';
}
}
int main()
{
int b = 0;
cin >>s>> b;
strintoint(s, a);
int la = s.size();
int tmp = 0;
for (int i = 1; i <= la; i++)
{
c[i] = (tmp * 10 + a[i]) / b;
tmp = (tmp * 10 + a[i]) % b;
}
int lc = 1;
while (c[lc] == 0 && lc < s.size()) lc++;
for (int i=lc; i <= s.size(); i++) cout << c[i];
return 0;
}