求N个大数的乘积
题目要求很清楚,就是要注意的点太多了。
数据:95.123 12 0.4321 20 5.1234 15 6.7592 9 98.999 10 1.0100 12 在做题的时候把dig想成了小数点后没用的0,一直做不出正确结果
程序优化了两个大数的乘法的代码,不用考虑数的位数循环边界直接在最大的地方,少写了2行。
n为0时输出1。
输出时为了不输出没用的0,设两个变量l,h,l指前面第一个不为0的位数,h指后面第一个不为0的位数
上代码
1 #include2 #include 3 #include 4 using namespace std; 5 const int N=205; 6 int main() { 7 int a[N],b[N],c[N]; 8 char s[N]; 9 int n,l,h,p;10 freopen("C:\\CODE\\in.txt", "r", stdin);11 // freopen("C:\\CODE\\out.txt","w",stdout);12 while(~scanf("%s%d",s,&n)) {13 memset(a,0,sizeof(a));14 memset(b,0,sizeof(b));15 memset(c,0,sizeof(c));16 b[0]=1;17 int ii=0,dig=0;18 for(int i=5; i>=0; i--)19 if(s[i]!='.')20 a[ii++]=s[i]-'0';21 for(int i=strlen(s)-1; s[i]!='.'; i--) {22 if(s[i]=='.')23 break;24 dig++;25 }26 27 //printf("***********dig = %d\n",dig);28 29 p=0;30 for(int i=0; i 9) {49 c[i+1]+=c[i]/10;50 c[i]%=10;51 }52 53 }54 55 for(int i=0; i =0; i--)68 if(b[i]) {69 h=i;70 break;71 }72 //输出73 dig=n*dig-1;74 if(dig>=h) {75 putchar('.');76 for(int i=dig; i>=l; i--) {77 printf("%d",b[i]);78 }79 putchar('\n');80 } else if(dig dig; i--) {82 printf("%d",b[i]);83 }84 putchar('\n');85 } else {86 for(int i=h; i>=l; i--) {87 if(i==dig)88 putchar('.');89 printf("%d",b[i]);90 }91 putchar('\n');92 }93 94 }95 return 0;96 }