您现在的位置是:主页 > news > 建设委员会官方网站/seo品牌优化
建设委员会官方网站/seo品牌优化
admin2025/6/15 16:31:20【news】
简介建设委员会官方网站,seo品牌优化,wordpress 阿里 cdn,企业网站优化的重要性高精度运算: 是指参与运算的数(加数,减数,因子……)范围大大超出了标准数据类型(整型,实型)能表示的范围的运算。 对于一个高精度正整数,接受与存储的程序段如下: 输入…
建设委员会官方网站,seo品牌优化,wordpress 阿里 cdn,企业网站优化的重要性高精度运算: 是指参与运算的数(加数,减数,因子……)范围大大超出了标准数据类型(整型,实型)能表示的范围的运算。
对于一个高精度正整数,接受与存储的程序段如下:
输入…
高精度运算:
是指参与运算的数(加数,减数,因子……)范围大大超出了标准数据类型(整型,实型)能表示的范围的运算。
对于一个高精度正整数,接受与存储的程序段如下:
输入处理
int na[110]={0},nb[110]={0};//用数组按位存放高精度正整数,初值全为0
int la=a.size(),lb=b.size();//高精度正整数的位数/***数组从右向左存储,na[0]存放个位,na[1]存放十位...***/for(int i=0;i<la;i++){na[la-1-i]=a[i]-'0';}for(int i=0;i<lb;i++){nb[lb-1-i]=b[i]-'0';}
相加
int lmax=la>lb?la:lb;//选取最长长度开始相加for(int i=0;i<lmax;i++){na[i]+=nb[i]; //两数相加na[i+1]+=na[i]/10;//要进的位na[i]%=10;//进位后的数}//如果最高位大于10,即na[lmax-1+1]=1;lmax++if(na[lmax]){lmax++;//位数加1}
处理最高进位
例如:当输入为00006 00003时
for(int i=lmax-1;i>=0;i--){if(na[lmax-1]==0)lmax--;}
输出结果
for(int i=lmax-1;i>=0;i--){ans+=na[i]+'0';//从高位到低位依次给字符串ans}
完整代码
#include<bits/stdc++.h>
using namespace std;
const int L=110;
//两个非负整数相加
//方法 倒置相加再还原
string add(string a,string b){string ans;int na[L]={0},nb[L]={0};int la=a.size(),lb=b.size();//倒置for(int i=0;i<la;i++){na[la-1-i]=a[i]-'0';}for(int i=0;i<lb;i++){nb[lb-1-i]=b[i]-'0';}//选取最长长度开始相加int lmax=la>lb?la:lb;for(int i=0;i<lmax;i++){na[i]+=nb[i];na[i+1]+=na[i]/10;na[i]%=10;}//如果最高位大于10,即na[lmax-1+1]=1;lmax++if(na[lmax]){lmax++;}/***第一次没有处理高位为0d的情况***/for(int i=lmax-1;i>=0;i--){if(na[lmax-1]==0)lmax--;}//还原for(int i=lmax-1;i>=0;i--){ans+=na[i]+'0';}return ans;
}int main(){
//高精度加法
//用tring 类型传入参数 算法复杂度 O(n)string a,b;while(cin>>a>>b){cout<<add(a,b)<<endl;}
return 0;
}
减法运算同理
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
const int L=110;
string sub(string a,string b){
string ans;
int na[L]={0},nb[L]={0};
int la=a.size(),lb=b.size();
int lmax=la>lb?la:lb;
for(int i=0;i<la;i++){na[la-1-i]=a[i]-'0';
}
for(int i=0;i<lb;i++){nb[lb-1-i]=b[i]-'0';
}
for(int i=0;i<lmax;i++){na[i]=na[i]-nb[i];if(na[i]<0){na[i]=na[i]+10;na[i+1]--;}
}
for(int i=lmax-1;i>=0;i--){if(na[lmax-1]==0){lmax--;}
}
for(int i=lmax-1;i>=0;i--){ans+=na[i]+'0';
}
return ans;
}
int main(){
int T;
string a,b;
scanf("%d",&T);
while(T--){cin>>a>>b;cout<<sub(a,b)<<endl;
}
return 0;
}