🌹作者:云小逸
📝个人主页: 云小逸的主页
📝Github: 云小逸的Github
🤟motto:要敢于一个人默默的面对自己, ==强大自己才是核心==。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前,其次就是现在!学会自己和解,与过去和解,努力爱自己。==希望春天来之前,我们一起面朝大海,春暖花开!==🤟
👏专栏:C++👏 👏专栏:Java语言👏
👏专栏:C语言初阶👏👏专栏:数据结构👏
前言
今天这一篇文章是借着上面一篇文章继续写关于高精度的问题:高精度乘法和高精度除法。
如果有错误,请谅解,请私信于我,谢谢!
——————————————————————————————
首先先写上几句话:献给坚持创作的我和点开这篇文章希望进步的你
1.不要对任何人抱有希望,每个人都在皱着眉头忙着应付自己的生活。
2.这个世界上的所有灵魂,都是半人半鬼,看得太近,其实都无法入眼。
3.你终会坠入柴米油盐的日子;无论你再怎么感性。
4.真正的美好都在别人的朋友圈里,而我的美好,总会被生活中的琐事打的七零八碎。
5.关有些事情,我们心里都明白,可是不知道为什么,就是不能说破。
高精度乘法:
题目:
给定两个非负整数(不含前导 0) A 和 B,请你计算 A×B 的值。
输入格式
共两行,第一行包含整数 A,第二行包含整数 B。
输出格式
共一行,包含 A×B 的值。
数据范围
1≤A的长度≤100000,
0≤B≤10000
输入样例:
2
3
输出样例:
6
做题思路:
先实现一个函数mul,它可以将一个整数向量A和一个整数b相乘,并返回一个新的整数向量C。在main函数中,它首先从输入中读取一个字符串a和一个整数b,然后将字符串a转换为整数向量A,最后调用mul函数将A和b相乘,并将结果输出到屏幕上。
代码:
#include <iostream>
#include <vector>
using namespace std;
vector<int> mul(vector<int> &A, int b)
{
vector<int> C;
int t = 0;
for (int i = 0; i < A.size() || t; i ++ )
{
if (i < A.size()) t += A[i] * b;
C.push_back(t % 10);
t /= 10;
}
while (C.size() > 1 && C.back() == 0) C.pop_back();
return C;
}
int main()
{
string a;
int b;
cin >> a >> b;
vector<int> A;
for (int i = a.size() - 1; i >= 0; i -- ) A.push_back(a[i] - '0');
auto C = mul(A, b);
for (int i = C.size() - 1; i >= 0; i -- ) printf("%d", C[i]);
return 0;
}
高精度除法:
题目:
给定两个非负整数(不含前导 0) A,B,请你计算 A/B 的商和余数。
输入格式
共两行,第一行包含整数 A,第二行包含整数 B。
输出格式
共两行,第一行输出所求的商,第二行输出所求余数。
数据范围
1≤A的长度≤100000,
1≤B≤10000,
B 一定不为 0
输入样例:
7
2
输出样例:
3
1
做题思路:
先实现一个整数除法的功能,它接受一个字符串表示的被除数和一个整数表示的除数,然后计算出商和余数,最后将结果输出到控制台。
代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> div(vector<int> &A, int b, int &r)
{
vector<int> C;
r = 0;
for (int i = A.size() - 1; i >= 0; i -- )
{
r = r * 10 + A[i];
C.push_back(r / b);
r %= b;
}
reverse(C.begin(), C.end());
while (C.size() > 1 && C.back() == 0) C.pop_back();
return C;
}
int main()
{
string a;
vector<int> A;
int B;
cin >> a >> B;
for (int i = a.size() - 1; i >= 0; i -- ) A.push_back(a[i] - '0');
int r;
auto C = div(A, B, r);
for (int i = C.size() - 1; i >= 0; i -- ) cout << C[i];
cout << endl << r << endl;
return 0;
}
最后
十分感谢你可以耐着性子把它读完和我可以坚持写到这里,送几句话,对你,也对我:
1.小时候的难过会挂在嘴边,长大了才知道,真正的难过是表现不出来的。
2.不是努力了就有回报的,有些人光活着就要拼尽全力。
3.受了天大的委屈也一声不吭,一句安慰,却让我眼里进了风沙。
4.希望你永远都不会懂什么是:万般皆是命,半点不由人
5.所谓现实就是,人没有钱就不如鬼,汤没有盐就不如水,慢慢地你就会发现,一颗好的心,比不上一张好的嘴。
最后如果觉得我写的还不错,请不要忘记==点赞==✌,==收藏==✌,加==关注==✌哦(。・ω・。)
愿我们一起加油,奔向更美好的未来,愿我们从懵懵懂懂的一枚==菜鸟==逐渐成为==大佬==。加油,为自己点赞!