大数乘法
/*************************************************************************
> File Name: 1.cpp
> Author: Gaojixuezha
> Mail: shenlonghun@gmail.com
> Created Time: 2015年05月19日 星期二 11时08分11秒
************************************************************************/
#include<iostream>
#include<cstring>
using namespace std;
int a[1000000],b[1000000],c[1000000];
int len,lena,lenb;
//大数乘法的实现,模拟手算
void mul()
{
int i,j;
memset(c,0,sizeof(c));
for(i=1;i<=lena;i++){
for(j=1;j<=lenb;j++){
c[i+j-1]+=a[i]*b[j];
if(c[i+j-1]>9){
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
}
}
}
if(c[lena+lenb-1]>9){
c[lena+lenb]+=c[lena+lenb-1]/10;
c[lena+lenb-1]%=10;
}
lena =lena +lenb;
for(i=1;i<=lena;i++){
a[i]=c[i];
}
}
int main(){
char str[10];
int n,down,up;
while(cin>>str>>n){
//当n为0的时候直接输出1
if(n==0){
cout<<1<<endl;
continue;
}
//每次清空内存,防止产生错误
memset(a,0,1000000);
memset(b,0,1000000);
int dot =-1;
//把小数点去掉,将数据存在数组里面
for(int i=5,j=1;i>=0;i--){
if(str[i]!='.'){
a[j]=b[j]=str[i]-'0';
j++;
}else{
dot=i;
}
}
//当没有小数点的时候,数组为六个。有的时候为五个
if(dot==-1){
lena=lenb=6;
}else{
lena=lenb=5;
}
//循环 数据开始相乘
for(int i=1;i<n;i++){
mul();
}
//输出数据,去除前面和后面的0,
if(dot==-1){
for(int i=lena;i>=1;i--){
cout<<a[i];
}
cout<<endl;
}else{
dot = 5-dot;
dot *=n;
for(int i=1;i<=lena;i++){
if(a[i]!=0){
down = i;
break;
}
}
for(int j=lena;j>=1;j--){
if(a[j]!=0)
{
up = j;
break;
}
}
int i=up;
if(up<dot){
i=dot;
}
int j=down;
if(j>dot){
j=dot+1;
}
for(;i>=j;i--){
if(i==dot){
cout<<".";
}
cout<<a[i];
}
cout<<endl;
}
}
return 0;
}