高精度与低精度的乘法
思路:将低精度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; }

浙公网安备 33010602011771号