POJ1001(北大ACM1001&&nyist 155 )
来源:互联网 发布:胆拖式旋转矩阵关注法 编辑:程序博客网 时间:2024/06/18 18:26
高精度乘法,字符串处理
#include <iostream> #include<iomanip> #include<cstring> using namespace std; int s; void chen(char a[],char b[])//a=a*b { int i,j,k,l,sum,c[410]={0}; l=strlen(a)+strlen(b); for(i=strlen(b)-1;i>=0;i--) for(j=strlen(a)-1,k=i+j+1;j>=0;j--,k--) { sum=(b[i]-'0')*(a[j]-'0')+c[k]; c[k]=sum%10;c[k-1]+=sum/10; } for(i=c[0]?0:1,j=0;i<l;i++) a[j++]=(c[i]+'0'); a[j]=0; } void quw0(char a[]) //去除尾部多余的零 { int i=strlen(a)-1; while(a[i]=='0') {a[i]=0;i--;} } void jilu(char a[]) { int i,t;for(i=0;i<strlen(a);i++) //判断有没有小数点if(a[i]=='.') break;if(i!=strlen(a)) //有小数点{for(i=strlen(a)-1,s=0;i>=1;i--)// s记录小数位数 if(a[i]!='.') s++; else break;if(a[i=0]=='0') // 0.0123变成123 { for(i=2;i<strlen(a);i++) if(a[i]!='0') {strcpy(a,&a[i]);break;} } else //将1.4321 变成14321 { for(t=0,i=1;i<strlen(a)-1;i++) { if(a[i]=='.') t=1; if(t) a[i]=a[i+1]; } a[i]=0; } } } void show(char a[]) { int i; if(s>=strlen(a)) cout<<'.'<<setfill('0')<<setw(s)<<a<<endl;// 前面补零 else //不用补零,直接加入小数点输出 {for(i=0;i<strlen(a);i++) if(strlen(a)-s==i) {cout<<'.'<<&a[i]; break;} else cout<<a[i]; cout<<endl; } } int main() { int n; char b[205],a[205]; while(cin>>b>>n) { if(n==0) {cout<<1<<endl;continue;} s=0; quw0(b); jilu(b); strcpy(a,b); for(int i=2;i<=n;i++) chen(a,b); s*=n; //结果的小数位数 show(a); } return 0; }
- POJ1001(北大ACM1001&&nyist 155 )
- 北大ACM1001
- 北大acm1001题解题报告
- ACM1001
- acm1001
- ACM1001
- 北大ACM1001心得(1)——大数加法
- POJ1001
- poj1001
- poj1001
- POJ1001
- POJ1001
- poj1001
- POJ1001
- poj1001
- POJ1001
- POJ1001
- poj1001
- poj1039 Pipe (计算几何)
- 手机移动电源 充电宝
- 无题
- JSTL 标签库详细介绍资料
- GCC 环境变量 & eclipse CDT 头文件配置
- POJ1001(北大ACM1001&&nyist 155 )
- 移植Boa Web服务器到ARM-Linux系统
- 识别长时间运行的代理作业并报警
- VISIO画用例图时使用include……
- 形意拳用力法
- 10个常见的 Android 新手误区
- 异步任务的实现之文件管理器
- 集合_用List实现栈和队列
- Android 4.0 ICS SystemUI浅析——StatusBar加载流程之Notification