本文主要是介绍POJ 1001 大数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
无聊水一道。。大数模拟
各种坑爹测试数据
#include "stdio.h"
#include "string.h"
int a[10010],b[10010],c[10010];
int main()
{int w,i,j,m,dian,k,le;char str[1001];while (scanf("%s%d",&str,&w)!=EOF){getchar();if (w==0){printf("1\n");continue;}memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(c,0,sizeof(c));le=strlen(str);m=1;dian=-1;for (i=le-1;i>=0;i--){if (str[i]=='.') dian=m-1;else{a[m]=str[i]-'0';m++;}}a[0]=m-1;while (a[a[0]]==0) {a[0]--; if (a[0]==0) break;}if (a[0]==0){printf("0\n");continue;}for (i=0;i<=a[0];i++)b[i]=a[i];for (i=2;i<=w;i++){memset(c,0,sizeof(c));for (j=1;j<=a[0];j++)for (k=1;k<=b[0];k++)c[j+k-1]+=a[j]*b[k];c[0]=a[0]+b[0]-1;for (j=1;j<=c[0];j++){c[j+1]+=c[j]/10;c[j]%=10;}if (c[c[0]+1]!=0) c[0]++;while (c[c[0]]==0){c[0]--;}for (j=0;j<=c[0];j++)a[j]=c[j];}if (dian==-1){for (i=a[0];i>=1;i--)printf("%d",a[i]);printf("\n");}else{dian*=w;if (a[0]<=dian){printf(".");for (i=1;i<=dian-a[0];i++)printf("0");k=1;while(a[k]==0) k++;for (i=a[0];i>=k;i--)printf("%d",a[i]);printf("\n");}else{for (i=a[0];i>dian;i--)printf("%d",a[i]);k=1;while(a[k]==0) k++;if (dian>=k) printf(".");for (i=dian;i>=k;i--)printf("%d",a[i]);printf("\n");}}}return 0;
}
这篇关于POJ 1001 大数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!