日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

大数的四则运算

發(fā)布時間:2025/4/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 大数的四则运算 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在處理大數(shù)的運算時,一般采用數(shù)組去模擬,下面介紹大數(shù)的加、減、乘、除四則運算的實現(xiàn)方法。

1.加法。

? 如:

? Input: 123456789123456789123456789

??????????? 1

? Output:123456789123456789123456790

? 輸入采用字符數(shù)組保存,然后將輸入存在整形數(shù)組里,然后逐位相加即可,同時注意進位處理。

#include<stdio.h> #include<string.h> int max(int x,int y) {if(x>y)return x;elsereturn y; }int main(void) {char str1[510],str2[510];while(scanf("%s %s",str1,str2)==2){int a[510]={0},b[510]={0},c[510]={0},i;int m,n,max1=0;m=strlen(str1);n=strlen(str2);max1=max(m,n);for(i=0;i<max1;i++){a[m-i-1]=str1[i]-48;b[n-i-1]=str2[i]-48;}for(i=0;i<max1;i++)c[i]=a[i]+b[i];for(i=0;i<max1;i++){ c[i+1]=c[i]/10+c[i+1];c[i]=c[i]%10;}if(c[max1]!=0){for(i=max1;i>=0;i--)printf("%d",c[i]);}else{for(i=max1-1;i>=0;i--)printf("%d",c[i]);}printf("\n");}return0; }


2.減法

Input:123456789123456789

?????????1

Output:123456789123456788

原理同加法一樣(這里假設(shè)第一個數(shù)大于第二個數(shù))

#include<stdio.h>#include<string.h>int main(void) {char s1[505],s2[505];while(scanf("%s%s",s1,s2)==2){int i,j,len1,len2;int a[105]={0},b[105]={0};len1=strlen(s1);len2=strlen(s2);for(i=len1-1,j=0;i>=0;i--,j++){a[j]=s1[i]-48;}for(i=len2-1,j=0;i>=0;i--,j++){b[j]=s2[i]-48;}for(i=0;i<len1;i++){a[i]=a[i]-b[i];if(a[i]<0){a[i]+=10;a[i+1]--;}}i=len1-1;while(a[i]==0){i--;}for(;i>=0;i--){printf("%d",a[i]);}printf("\n");}return0; }

?3.乘法

? 原理上也是采用數(shù)組模擬。

?a[i]?? 12345

?b[j]??????? 23

?用c[k]來保存每次的運算結(jié)果,k=i+j;

?c[i+j]=c[i+j]+a[i]*b[j];

?這里來模擬一次乘法過程:

??????????? 123

?????????*???12

????? --------------

?????????????246???

????????+ 123

????? --------------

??????????? 1476

#include<iostream> #include<string.h> usingnamespace std;int main(void) {char s1[510],s2[510],temp[510];int a[510],b[510],c[1010];while(scanf("%s%s",s1,s2)==2){int i,j,h;int len1,len2;if(strlen(s1)<strlen(s2)){strcpy(temp,s1);strcpy(s1,s2);strcpy(s2,temp);}len1=strlen(s1);len2=strlen(s2);memset(c,0,sizeof(c));for(i=len1-1,j=0;i>=0;i--,j++){a[j]=s1[i]-48;}for(i=len2-1,j=0;i>=0;i--,j++){b[j]=s2[i]-48;}for(i=0;i<len2;i++){for(j=0;j<len1;j++){c[i+j]=a[j]*b[i]+c[i+j];}}for(i=0;i<2*len1;i++){if(c[i]>=10){c[i+1]=c[i+1]+c[i]/10;c[i]=c[i]%10;}}i=2*len1;while(c[i]==0){i--;}if(i<0){printf("0\n");}else{for(;i>=0;i--)printf("%d",c[i]);printf("\n");} }return0; }

4.除法

除法也是利用數(shù)組模擬,不過這里不是直接按照除法的運算來,而是把除法轉(zhuǎn)變?yōu)闇p法運算,從而求得結(jié)果。

#include<stdio.h> #include<string.h>int len1,len2; char s1[905]; char s2[905]; int re[905];void sub() {int i=0;int j;while(1){if(s1[i]=='0')i++;else{j=i;break;}}for(;i<len2;i++){s1[i]=s1[i]-s2[i]+'0';}for(i=len2-1;i>j;i--) //低位開始檢測是否小于0{if(s1[i]<'0'){s1[i]+=10;s1[i-1]--;}} }int main(void) {int i,p;while(scanf("%s%s",s1,s2)==2){len1=strlen(s1);len2=strlen(s2);if(len1<len2||(len1==len2&&strncmp(s1,s2,len2)<0)) //如果a<b,直接輸出0{printf("0\n");continue;}p=0;while(1){re[p]=0;while(strncmp(s1,s2,len2)>=0) //一直進行減法,直到不能減為止{sub();re[p]++;}p++;if(len1==len2)break;for(i=len2-1;i>=0;i--) //在s2前面補0,以便進行減法運算{s2[i+1]=s2[i];}s2[0]='0';len2++;s2[len2]='\0';}i=0;while(1){if(re[i]==0)i++;elsebreak;}for(;i<p;i++)printf("%d",re[i]);printf("\n");}return0; }

總結(jié)

以上是生活随笔為你收集整理的大数的四则运算的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。