📄 1292.cpp
字号:
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
#define MAX 110
#define LARGE 10//LARGER=10^(G-1)
#define G 2 //10^(G-1)进制
class BigInt
{
public:
unsigned len;
unsigned v[MAX];
int sign;//记录数值符号
int rec;//记录除数是否为0
BigInt();
~BigInt();
/**************************
重载了三个赋值运算
调用各运算时要先由Mov()函数将他们转化存储到数组v里面
**************************/
void Mov(BigInt& A);
void Mov(char*A);
void Mov(int A);
BigInt Add(BigInt& A);
void Display();
};
BigInt::BigInt()
{
len=1;
int i;
for( i=0;i<MAX;i++){ v[i]=0; }
}
BigInt::~BigInt(){ }
void BigInt::Mov(int A)
{
v[0]=A; int i,k; k=A; i=0;
while(k>0)
{
v[i]=k-k/LARGE*LARGE;
k=k/LARGE;
i++;
}
len=i;
}
void BigInt::Mov(BigInt& A)
{
len=A.len;
int i;
for( i=0;i<len;i++){
v[i]=A.v[i];
}
while(i<MAX){
v[i]=0; i++; }
}
void BigInt::Mov(char *A)
{
int A_len=strlen(A);
int k,i,j,t;
len=A_len/(G-1);
if(A_len%(G-1))len++;
for(i=0,j=A_len-1;i<len&&j>=0;i++)
{
k=1; t=1;
while(j>=0&&k<G)
{
v[i]+=(A[j]-'0')*t;
t*=10; j--; k++;
}
}
}
BigInt BigInt::Add(BigInt& A)
{
BigInt X;
X.Mov(*this);
int i,sum=0;
int carry=0;
if(X.len<A.len)
X.len=A.len;
for( i=0;i<=X.len;i++)
{
sum=A.v[i];
sum=sum+X.v[i]+carry;
X.v[i]=sum%LARGE; //10^(G-1)进制
carry=sum/LARGE;
}
if(X.v[X.len])
{ X.len++; }
return X;
}
void BigInt::Display()
{
for(int i=len-1;i>=0;i--)
{
printf("%d",v[i]);//printf("%0(G-1)d",v[i]);当G=3时为100进制,则printf("%02d",v[i];
}
printf("\n");
}
int main(){
char p[MAX];
int N,j=0;
memset(p, '\0', sizeof(p));
scanf("%d",&N);
while(j<N)
{
int i=0;
BigInt c;
while( cin >> p&& !(p[0]=='0'&&p[1]=='\0') )
{
i++;
BigInt a;
if(p[0]=='0')
a.Mov(&p[1]);
else a.Mov(p);
memset(p, '\0', sizeof(p));
if(i!=1)
c = c.Add(a);
else
c=a;
}
c.Display();
if(j!=N-1)
printf("\n");
j++;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -