什么是高精度
通俗说就是多位数加减运算100000000000000000000000000000000+1000000000000000000000进行十几位数的加运算
思路
通过string输入两个数字
存入int数组内
进行颠倒把个位对齐
进行加法运算进位运算
存入一个新的int数组
倒序打印这个新的数组便是运算的结果
头文件
#include<iostream>
using namespace std;
#include<algorithm>
#include<string>
主函数
int main()
{
string a,b;
cin >> a >> b;
//cout << a << endl;
//cout << b << endl;
int arr1[101] = {0};
int arr2[101] = {0};
strtoint(a,arr1);
strtoint(b,arr2);
//printarr(arr1,a.size());
//printarr(arr2,b.size());
jiafa(arr1,arr2,max(a.size(),b.size()));
}
将string存入int数组的函数
void strtoint(string str,int arr[])
{
int j = str.size();
j = j - 1;
for(int i = 0 ; i < str.size() ; i++)
{
//cout << " j - i = " << j - i<<endl; // 0 1 2 3 4
//cout << "arr[j - i] = " <<arr[j - i]<<endl; // 4 3 2 1 0
//cout << " i = " << i << endl;
//cout << "str[i] = " <<str[i]<<endl;
arr[j - i] = str[i] - '0';
}
//printarr(arr,str.size());
}
进行颠倒后两个数组加法的函数
void jiafa(int arr1[],int arr2[],int r) // 1234 4321
// 432 734
{ //170100
//cout << r+1 << endl;
int he[r+1] = {0};
for(int i = 0 ; i < r+1; i++)
{
if(arr1[i] > 10)
{
arr1[i] = 0;
}
if(arr2[i] > 10)
{
arr2[i] = 0;
}
he[i] = arr1[i] + arr2[i] + he[i];
//cout << " 加和后:" << he[i] << endl;
he[i + 1] = he[i] / 10;
he[i] %= 10;
//cout << " 余数后:" << he[i] << endl;
}
printarr(he,r+1);
}
打印函数
void printarr(int arr[],int size)
{
int p = 0;
for(int i = size - 1;i >= 0 ; i--)
{
if(arr[i] != 0) // 如果遍历过程中有不是0的数p++
{
p++; // 0013214 前面的00不会输出 023042 只会输出23042
}
if(p!=0) // 如果p不是0 输出此时的数
{
cout << arr[i] ;
}
}
//cout << endl;
if(p == 0) //如果输入00000 000情况下q一直为0的情况输出0
{
cout << 0 << endl;
}
}
整体源代码
#include<iostream>
using namespace std;
#include<algorithm>
#include<string>
void printarr(int arr[],int size)
{
int p = 0;
for(int i = size - 1;i >= 0 ; i--)
{
if(arr[i] != 0)
{
p++;
}
if(p!=0)
{
cout << arr[i] ;
}
}
//cout << endl;
if(p == 0)
{
cout << 0 << endl;
}
} /// 0 1 2 3
void strtoint(string str,int arr[]) /// 1 2 3 4 4
{
int j = str.size(); /// 4 3 2 1 3 - 0 3-1 3-2 3 - 3
j = j - 1;
for(int i = 0 ; i < str.size() ; i++)
{
//cout << " j - i = " << j - i<<endl;
//cout << "arr[j - i] = " <<arr[j - i]<<endl;
//cout << " i = " << i << endl;
//cout << "str[i] = " <<str[i]<<endl;
arr[j - i] = str[i] - '0';
}
//printarr(arr,str.size());
}
void jiafa(int arr1[],int arr2[],int r) // 1234 4321
// 432 734
{ //170100
//cout << r+1 << endl;
int he[r+1] = {0};
for(int i = 0 ; i < r+1; i++)
{
if(arr1[i] > 10)
{
arr1[i] = 0;
}
if(arr2[i] > 10)
{
arr2[i] = 0;
}
he[i] = arr1[i] + arr2[i] + he[i];
//cout << " 加和后:" << he[i] << endl;
he[i + 1] = he[i] / 10;
he[i] %= 10;
//cout << " 余数后:" << he[i] << endl;
}
printarr(he,r+1);
}
int main()
{
string a,b;
cin >> a >> b;
//cout << a << endl;
//cout << b << endl;
int arr1[101] = {0};
int arr2[101] = {0};
strtoint(a,arr1);
strtoint(b,arr2);
//printarr(arr1,a.size());
//printarr(arr2,b.size());
jiafa(arr1,arr2,max(a.size(),b.size()));
}
运行结果
1.输入10000000 231313123相加
2.输入000000 000相加
3.输入32131414141124412414 4124214141342342相加