【問題描述】
編寫乙個程式,進行高精度整數的加、減、乘運算。
輸入兩個十進位製大整數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時做下交換在計算,輸出時別忘了標記負號。高精度乘法需要注意的問題是,要在做完乘法之後再調整為十進位制。有的初學者小盆友喜...