高精度乘单精度
说明
高精度乘单精度,a \times ba×b。 a是一个很大的非负整数,但不超过240位,b是一个非负整数不超过10000,求a \times ba×b。
输入格式
两行数字,第一行是a,第二行是b。
输出格式
一行,输出a \times ba×b的计算结果。
样例
输入数据 1
111111111111111111111111111111111111
10
输出数据 1
1111111111111111111111111111111111110
#include<bits/stdc++.h>
using namespace std;
const int mx=300;
string a;
int b;
int c[mx],i,p,x;
int main()
{
cin>>a>>b;
int l=a.size();
for(int i=0; i<=mx-1; i++) c[i]=0;
for(int i=0; i<=l-1; i++) c[i]=a[l-1-i]-'0';
for(int i=0; i<=l-1; i++) c[i]*=b;
for(int i=0; i<=l-1; i++)
{
x=c[i];
c[i]=x%10;
c[i+1]+=x/10;
}
int p=l;
while(c[p]==0&&p>0) p--;
for(; p>=0; p--) cout<<c[p];
return 0;
}
高精度乘高精度
说明
高精度乘,求两个很大的非负整数相乘的结果。
输入格式
2个非负整数,每个一行,每个整数不超过240位。
输出格式
一个整数,表示相乘的结果。
样例
输入数据 1
1111111111111111111111111
2222222222222222222222222
输出数据 1
2469135802469135802469135308641975308641975308642
#include<bits/stdc++.h>
using namespace std;
string gjdjf(string o,string p){
//高精度加法
if(o.size()<p.size()){
swap(o,p);
}
while(p.size()<o.size()){
p="0"+p;
}
int j=0;
int ut;
string op="";
for(int i=p.size()-1;i>=0;i--){
int t=p[i]-'0';
int u=o[i]-'0';
ut=u+t+j;
if(ut>=10){
j=ut%10;
ut/=10;
}
char ch=ut+'0';
op=ch+op;
}
if(j>0){
char ch=j+'0';
op=ch+op;
}
return op;
}
string gjdcf(string k,string l){
int o[100010],p[100010];
for(int i=l.size()-1;i>=0;i--){
int m=l[i]-'0';
for(int n=k.size()-1;n>=0;n--){
int y=k[n]-'0';//l.size()-1-i位和k.size()-n位*
y*=m;
o[l.size()-i+k.size()-n-1]+=y;
}
}
int kl,oi=0;
string nm="";
/* for(int i=0;i<=l.size()+k.size();i++){
cout<<o[i]<<endl;
}*/
for(int i=1;i<=l.size()+k.size()-1;i++){
o[i]+=oi;
// cout<<o[i]<<" ";
if(o[i]>=10){
oi=o[i]/10;
o[i]%=10;
}
else{
oi=0;
}
// cout<<o[i]<<endl;
char ch=o[i]+'0';
nm=ch+nm;
}
if(oi>0){
char ch=oi+'0';
nm=ch+nm;
}
return nm;
}
int main(){
string x,k;
cin>>x>>k;
cout<<gjdcf(x,k);
return 0;
}
高精度除单精度
说明
输入一个高精度整数a(不超过100位),和一个单精度整数b(b不超过8位),请求出a除以b得到的商。
输入格式
输入有2行,第一行有一个整数a,第二行有一个整数b。
输出格式
输出a/b得到的商。
样例
输入数据 1
8162148605591693302243
20136
输出数据 1
405351043185920406
//高精度除法 1
#include<bits/stdc++.h>
using namespace std;
const int mx=1010;
string s;
int a[mx],c[mx],i,n,la,lc,x;
int main(){
cin>>s>>n;
la=s.size();
for(i=0;i<la;i++) a[i+1]=s[i]-'0';
for(i=1;i<=la;i++){
c[i]=(x*10+a[i])/n;
x=(x*10+a[i])%n;
}
lc=1;
while(c[lc]==0 && lc<la)
lc++;
for(i=lc;i<=la;i++)
cout<<c[i];
return 0;
}