高精度--模板
程序员文章站
2022-03-10 22:49:21
加法#pragma GCC optimize(1)#pragma GCC optimize(2)#pragma GCC optimize(3,"Ofast","inline")#include #include #include using namespace std;#define MAXN 1000int main(void){ char str[MAXN]; in...
加法
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
#include <iostream>
#include <stdio.h>
#include <bits/stdc++.h>
using namespace std;
#define MAXN 1000
int main(void)
{
char str[MAXN];
int arr1[MAXN],arr2[MAXN],len,len1,len2,i,j;
scanf("%s",str);
len1=strlen(str);
for(i=0;i<len1;i++)//字符串倒叙导入数组,方便从低位开始运算
arr1[i]=str[len1-1-i]-'0';
scanf("%s",str);
len2=strlen(str);
for(i=0;i<len2;i++)
arr2[i]=str[len2-1-i]-'0';//字符串中的是字符,要转换成数字
len=(len1>len2)?len1:len2;
for(i=0;i<len;i++)
{
j=(arr1[i]+arr2[i])/10;
arr1[i+1]+=j;//进位
arr1[i]=(arr1[i]+arr2[i])%10;//保留
}
if(j)len++;//最后一位是否进位
for(i=0;i<len;i++)
printf("%d",arr1[len-1-i]);
return 0;
}
/**************************************************************
Problem: 3580
User: 2019UPC110
Language: C++
Result: 正确
Time:1 ms
Memory:2024 kb
****************************************************************/
减法
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
//std::ios::sync_with_stdio(false);
//std::cin.tie(0);
using namespace std;
int a[210],b[210],c[210],lena,lenb,lenc,i;
char n[210],n1[210],n2[210];
int main()
{
scanf("%s",n1);
scanf("%s",n2);
if(strlen(n1)<strlen(n2)||(strlen(n1)==strlen(n2)&&strcmp(n1,n2)<0))
{
strcpy(n,n1);
strcpy(n1,n2);
strcpy(n2,n);
cout<<"-";
}
lena=strlen(n1);lenb=strlen(n2);
for(i=0;i<=lena-1;i++)a[lena-i]=int(n1[i]-'0');
for(i=0;i<=lenb-1;i++)b[lenb-i]=int(n2[i]-'0');
i=1;
while(i<=lena||i<=lenb)
{
if(a[i]<b[i])
{
a[i]+=10;
a[i+1]--;
}
c[i]=a[i]-b[i];
i++;
}
lenc=i;
while((c[lenc]==0)&&(lenc>1))lenc--;
for(i=lenc;i>=1;i--)cout<<c[i];
cout<<endl;
return 0;
}
乘法写的好hh
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
//std::ios::sync_with_stdio(false);
//std::cin.tie(0);
int main(){
string a,b;
int an[105]={0},bn[105]={0},c[15000]={0};
cin>>a>>b;
int lena=a.length();
int lenb=b.length();
//倒序存储两个数于整型数组中
for(int i=0;i<lena;i++){
an[lena-i-1]=a[i]-'0';
}
for(int i=0;i<lenb;i++){
bn[lenb-i-1]=b[i]-'0';
}
//进行乘法运算,结果存于c[]
for(int i=0;i<lenb;i++){
for(int j=0;j<lena;j++){
c[i+j]+=an[j]*bn[i];
c[i+j+1]+=c[i+j]/10;
c[i+j]%=10;
}
}
int lenc=lena+lenb;
//删除结果高位的前缀0
while(c[lenc-1]==0 && lenc>1){
lenc--;
}
//将结果倒序输出
for(int i=lenc-1;i>=0;i--){
cout<<c[i];
}
cout<<endl;
return 0;
}
本文地址:https://blog.csdn.net/QXK_Jack/article/details/107159642
上一篇: Android性能优化(三):响应优化