高精度整數運算

2021-04-09 02:47:22 字數 3207 閱讀 3990

【問題描述】

編寫乙個程式,進行高精度整數的加、減、乘運算。

輸入兩個十進位製大整數m和

n(m、

n最長可達

50位),根據要求計算運算結果並輸出。

【輸入形式】

標準輸入上依次分行輸入以下內容: 1.

第一行輸入第乙個大整數m。

m可能帶有負號,後面是最長可達

50位的數字序列。 2.

第二行只有乙個字元,可以是「

+」、「

-」、「

*」,分別代表加、減、乘三種運算子。 3.

第三行輸入大整數

n,格式與m相同

m、n

均不帶有字首的多餘的0

【輸出形式】

在標準輸出上列印運算結果,輸出一行字串行,是大整數m和

n和運算結果。

如果該運算結果是正數,則直接輸出各位數字序列;如果是負數,則首先要輸出負號。

各位數字緊密輸出,不帶有字首的多餘的0。

【樣例輸入】

5237987998834789012400870934

+

-2513408741041439876624598245767234989534

【樣例輸出】

-2513408741036201888625763456754834118600

【樣例說明】

輸入的兩個大整數m和

n(其中

n是負數),要求進行加法運算。結果如上例所示。

【執行時限】

5秒。

【上傳檔案】

上傳c

語言源程式,以

bigint.c

命名。

/**///

#include

#include

char op,opp;

typedef struct node

link;

link* add(link* a,link* b);

link* minus(link* a,link* b,int sign);

void multi(link* a,link* b);

int main()

else  //+

}else

i++;

if(flag==1)

}scanf("%c",&op);

scanf("%c",&temp);

if(temp=='/n')

i=0;

while(temp!='/n')

else  //+

}else

i++;

if(flag==1)

}opp=op;

if(opp=='+')

else if(ahead->data==1&&bhead->data==1)//都為負

else if(ahead->data==0&&bhead->data==1)//正加負=正減正

else if(ahead->data==1&&bhead->data==0)//負加正=正減正 }

if(opp=='-')

else if(ahead->data==1&&bhead->data==1)//負減負=負加正=正減正

else if(ahead->data==0&&bhead->data==1)//正減負=正加正

else if(ahead->data==1&&bhead->data==0)//負減正=負加負

}if(opp=='*')

return 0;

}link* add(link* a,link* b)

if(a->data==1&&b->data==1)//全負

result->next=null;

a=a->next;

b=b->next;

c=0;

while(a!=null&&b!=null)

//putchar('o');

while(a!=null)

while(b!=null)

if(c==1)//還有進製

if(result->data==1)

result=result->next;

while(result!=null)

putchar('/n');

return result;

}link* minus(link* a,link* b,int sign)

else

node->next=result->next;

result->next=node;

a=a->next;

b=b->next;

}if(a==null&&b!=null||a==null&&b==null&&c!=0)

else

else

node->next=result->next;

result->next=node;

a=a->next;}}

if(result->data==1)

n=result->next;

while(n!=null&&n->data==0)

if(n!=null)

}else

putchar('/n');

return result;

}void multi(link* a,link* b)

,num,i,j;

link * ta,* tb;//用作迴圈

int c,cc;//進製

//link* result=(link*)malloc(sizeof(link));

if(a->data==1&&b->data==0)

else if(a->data==0&&b->data==1)

else

ta=a->next;

i=1;

cc=0;

while(ta!=null)

// printf("%d %d/n",c,cc);

if((cc+c)>0)

i++;

ta=ta->next;

}// if(cc>0)//還有進製

// if(result[0]==1)

i=j-1;

while(i>=1&&result[i]==0)

if(i>=1)

}else

putchar('/n');

}

高精度 C 中大整數運算

cin a b for i a.size 1 i 0 i for i b.size 1 i 0 i include include using namespace std const int n 1e6 10 10防止出現邊界問題 vector int add vector int a,vector...

經典例題 高精度(大整數)運算

大整數運算 1.藍橋杯 大整數階乘 問題描述 輸入乙個正整數n,輸出n 的值。其中n 1 2 3 n 解決思路 n 非常大,可以使用陣列儲存各位,a 0 表示最低位,初始化為1,然後迴圈,每一位都乘以2 3 n,根據各位大小判斷是否向前進製,最後逆序輸出各位即可 include include us...

高精度運算

今天覆習了一下高精度運算。我覺得這種簡單的東西也得看一看,至少給自己留點兒低!高精度可以壓位的,但我今年懶得寫了 首先是加減法很簡單了,沒什麼值得特別強調的。高精度減法時別忘了,a時做下交換在計算,輸出時別忘了標記負號。高精度乘法需要注意的問題是,要在做完乘法之後再調整為十進位制。有的初學者小盆友喜...