高精度與低精度的乘法
阿新 • • 發佈:2022-04-12
思路:將低精度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.lenView Code=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; }