高精度加法
题目描述高精度加法,相当于a+b problem,不用考虑负数.
输入格式分两行输入。a,b leq 10^{500}a,b≤10500
输出格式输出只有一行,代表a+ba+b的值
输入输出样例输入 #1复制
1 1
输出 #1
2
输入 #2
1001 9099
输出 #2复制
10100
#includeusing namespace std; int x[510],y[510],c[510],ans[510]; int main() { string a,b; int i,j,lta,ltb; cin>>a>>b; int la=a.size(); int lb=b.size(); lta=la;//la在循环体里,不能在x[]中直接用 ltb=lb; for(i=0;i 9) { c[i+1]++;//进位 ans[i]-=10; } } if(ans[len]!=0) { len++;//位数是否增加 } for(j=len-1;j>=0;j--) { cout<
高精度减法
题目描述高精度减法。
输入格式两个整数 a,b(第二个可能比第一个大)。
输出格式结果(是负数要输出负号)。
输入输出样例输入 #1
2 1
输出 #1
1说明/提示
- 20%20% 数据 a,ba,b 在 long long 范围内;
- 100%100% 数据 0
#include
#include using namespace std; int x[10090],y[10090],c[10090],ans[10090]; int main() { string a,b; cin>>a>>b; int i,la,lb,flag=0,len1,len2; char op='-'; len1=a.size(); len2=b.size(); if(len1 1&&ans[len1-1]==0) len1--; if(flag) cout< =0;i--) cout< 高精度乘法 - 题目描述
求两数的积。
输入格式两行,两个整数。
输出格式一行一个整数表示乘积。
输入输出样例输入 #1复制
1 2
输出 #1复制
2
说明/提示每个数字不超过 10^{2000}102000 ,需用高精。
-
#include
using namespace std; int x[2010],y[2010],ans[4020]; int main() { string a,b; int i,j; cin>>a>>b; int la=a.size(); int lb=b.size(); for(i=0;i 9) { ans[i+1]+=ans[i]/10; ans[i]%=10; } } while(ans[len-1]==0&&len>1) len--; for(i=len-1;i>=0;i--) { cout< 高精度除法
- 题目描述
输入两个整数 a,ba,b,输出它们的商。
输入格式两行,第一行是被除数,第二行是除数。
输出格式一行,商的整数部分。
输入输出样例输入 #1复制
10 2
输出 #1复制
5
说明/提示0le ale 10^{5000}0≤a≤105000,1le ble 10^91≤b≤109。
-
法一(高精除以低精)
-
#include
#include #include using namespace std; char a[5005]; int ans[5005]; int main() { long long b,k=0,c=0; int la,i,top=0,flag=0; cin>>a; cin>>b; la=strlen(a); for(i=0;i 法二(高精除以高精)
-
#include
#include #include using namespace std; int a[5005],b[100],c[5005],ans[5005]; bool cmp(); int main() { string x,y; int i,j,k; cin>>x>>y; a[0]=x.size(); b[0]=y.size();//a[0]b[0]c[0]均用于记录位数 for(i=1;i<=a[0];i++) { a[i]=x[a[0]-i]-48; } for(i=1;i<=b[0];i++) { b[i]=y[b[0]-i]-48;//逆序 } c[0]=0; for(i=a[0];i>=1;i--) { for(j=b[0];j>=1;j--) { c[j+1]=c[j];//数字右移,相当于乘上十次幂 } c[1]=a[i]; c[0]++;if(!c[c[0]])--c[0]; while(cmp()) { int t=0; for(k=1;k<=c[0];k++) { c[k]=c[k]-b[k]-t; if(c[k]<0) { c[k]+=10; t=1; } else t=0; } while(c[0]>1&&c[c[0]]==0) { c[0]--;//去除余数的前导0 } ans[i]++;//每从c中减去一个b,当前位答案计数加1 } } ans[0]=a[0]; while(ans[0]>1&&ans[ans[0]]==0) ans[0]--;//去除答案前导0 for(i=ans[0];i>=1;i--) cout =1;i--) { if(c[i]b[i]) return 1; } return 1; }



