1. 程式人生 > 其它 >高精度與低精度的乘法

高精度與低精度的乘法

思路:將低精度num看成一個整體(int儲存),再用高精度的低位依次乘num,個位作為結果,其他位作為進位傳遞。

輸入、輸出、轉換與高精度加法一樣。最後要注意判斷進位是否為零,若不為零則用迴圈取個位依次儲存至陣列高位(進位可能不止一位)。

#include<cstdio>
#include<cstring>

struct bign{
    int d[1000];
    int len;
    bign(){
        memset(d,0,sizeof(d));
        len=0;
    }
};

bign change(char str[]){
    bign a;
    a.len
=strlen(str); for(int i=0;i<a.len;i++){ a.d[i]=str[a.len-1-i]-'0'; } return a; } bign multi(bign a,int num){ //將num始終作為一個整體,用高精度的每一位分別乘以num。 //保留個位作為結果,其他位作為進位向前傳遞 bign b; int carry=0;//進位 for(int i=0;i<a.len;i++){ int temp=a.d[i]*num+carry; b.d[b.len++]=temp%10
; carry=temp/10; } while(carry!=0){ b.d[b.len++]=carry%10; carry/=10; } return b; } void print(bign a){ for(int i=a.len-1;i>=0;i--){ printf("%d",a.d[i]); } } int main() { char str[1000]; int num; scanf("%s%d",str,&num); bign a=change(str); print(multi(a,num));
return 0; }
View Code