高精度四則運算 大數加減乘除

2021-10-21 05:12:53 字數 1891 閱讀 7535

791 高精度加法

給定兩個正整數,計算它們的和。

輸入格式

共兩行,每行包含乙個整數。

輸出格式

共一行,包含所求的和。

資料範圍

1≤整數長度≤100000

輸入樣例:

1223

輸出樣例:

35

#include #include #define lenmax 100000

int main()

while(i>0)

while(j>0)

while(carry>0)

while(k>0) printf("%d",c[--k]);

return 0;

}

792.高精度減法

給定兩個正整數,計算它們的差,計算結果可能為負數。

輸入格式

共兩行,每行包含乙個整數。

輸出格式

共一行,包含所求的差。

資料範圍

1≤整數長度≤105

輸入樣例:

3211

輸出樣例:

21

#include #include #define lenmax 100000

int main()

int n=strlen(t1),m=strlen(t2),borrow=0,t,i,j,a[n],b[m],c[lenmax+1],k=0;

for(i=0;i0 && j>0)

c[k++]=t;

}while(i>0)

c[k++]=t;

}if(f==1) printf("-"); //負數

while(k>0 && c[--k]==0); //結果的前導0 因為k>0 所以當結果為0時 下一步也會有輸出

while(k>=0) printf("%d",c[k--]);

return 0;

}

793 高精度乘法

給定兩個正整數a和b,請你計算a * b的值。

輸入格式

共兩行,第一行包含整數a,第二行包含整數b。

輸出格式

共一行,包含a * b的值。

資料範圍

1≤a的長度≤100000,

0≤b≤10000

輸入樣例:23

輸出樣例:

6

#include #include #define lenmax 100000

int main()

while(carry>0)

while(k>0 && c[--k]==0); //去除高位0 這部分處理和減法一樣 加法的時候不會出現高位0的情況

while(k>=0) printf("%d",c[k--]); //即使結果為0 也有正常輸出

return 0;

}

794 高精度除法

給定兩個非負整數a,b,請你計算 a / b的商和餘數。

輸入格式

共兩行,第一行包含整數a,第二行包含整數b。

輸出格式

共兩行,第一行輸出所求的商,第二行輸出所求餘數。

資料範圍

1≤a的長度≤100000,

1≤b≤10000

b 一定不為0

輸入樣例:72

輸出樣例:31

#include #include #define lenmax 100000

int main()

for(i=0;iif(i==k) printf("0"); //商為0 單獨判斷

while(iprintf("\n%d",borrow);

return 0;

}

大數字的加減乘除四則運算

有時候對整數做四則運算時,發現數字過大,超出了通常程式語言提供型別的最大範圍,自己動手總結了一下對這些數字進行運算的技巧。先實現加法和乘法。2個進製相同的數字的加法運算有這樣的規律 1.m位的加數加上n位的加數,和的位數最大為 max m,n 1 2.低位向高位的進製必然小於2 在乘法中,m位的數乘...

位運算實現加減乘除四則運算

只用邏輯運算實現加法 int add int a,int b int sumtemp a b int carry a b 1 return add 只用邏輯運算實現減法 int minus int a,int b 邏輯運算實現除法 低效 int div int a,int b return resu...

位運算實現加減乘除四則運算

目錄加法 減法 乘法 除法計算機最基本的操作單元是位元組 byte 乙個位元組由8個位 bit 組成,乙個位只能儲存乙個0或1,其實也就是高低電平。無論多麼複雜的邏輯 龐大的資料 酷炫的介面,最終體現在計算機最底層都只是對0101的儲存和運算。不考慮進製情況下,位的異或運算跟求 和 的結果一致 異或...