#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
struct node{
int len;
int num[60000];
node(){len = 0; memset(num,0,sizeof num);}
node friend operator + (node a,node b){
node c;
c.len = 0;
int p1, p2; p1 = p2 = 1;
while(p1 <= a.len && p2 <= b.len){
c.num[++c.len] += a.num[p1++] + b.num[p2++];
if(c.num[c.len] >= 10) c.num[c.len+1]++, c.num[c.len] %= 10;
}
while(p1 <= a.len) {
c.num[++c.len] += a.num[p1++];
if(c.num[c.len] >= 10) c.num[c.len+1]++, c.num[c.len] %= 10;
}
while(p2 <= b.len) {
c.num[++c.len] += b.num[p2++];
if(c.num[c.len] >= 10) c.num[c.len+1]++, c.num[c.len] %= 10;
}
if(c.num[c.len+1] != 0) c.len++;
return c;
}
node friend operator - (node a,node b){
//a>b
for(int i=1;i<=b.len;i++){
if(a.num[i] >= b.num[i]){
a.num[i] -= b.num[i];
}else{
b.num[i] -= a.num[i];
a.num[i] = 0;
for(int j=i+1;j<=a.len;j++){
if(a.num[j] != 0){
a.num[j]--;
if(a.num[j] == 0 && j == a.len) a.len--;
for(int k=i;k<j;k++) a.num[k] = 9;
a.num[i] = 10 - b.num[i];
break;
}
}
}
}
return a;
}
node friend operator * (node a,node b){
node c;
c.len = 1;
for(int i=1;i<=a.len;i++){
for(int j=1;j<=b.len;j++){
int pos = i+j-1;
c.num[pos] += a.num[i]*b.num[j];
if(c.num[pos] >= 10){
int add = c.num[pos]/10;
c.num[pos] %= 10;
c.num[pos+1] += add;
pos++;
}
c.len = max(c.len, pos);
}
}
for(int i=c.len;i>=1;i--) {
if(c.num[i] != 0) break;
c.len = i;
}
return c;
}
void print(){
for(int i=len;i>=1;i--){
printf("%d",num[i]);
}
printf("\n");
}
void get(char s[]){
int l = strlen(s);
len = l;
for(int i=1;i<=l;i++){
num[i] = s[l-i]-'0';
}
}
void get2(int n){
len = 0;
while(n){
num[++len] = n%10;
n /= 10;
}
}
}a,b,c;
int ans[100000];
int main()
{
// c = a + b;
// c = a - b;
// c = a * b;
c.print();
return 0;
}
大数高精度+-*
猜你喜欢
转载自blog.csdn.net/w326159487/article/details/79849570
今日推荐
周排行