| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
VS2008编译过的都CE,有没有搞错啊,高手帮忙看一下#include <stdio.h>
#include <string.h>
#define MAX_LEN 200
unsigned an1[MAX_LEN+10];
unsigned an2[MAX_LEN*2+10];
unsigned aResult[MAX_LEN * 2 + 10];
char szLine1[MAX_LEN+10];
void multi(unsigned int *an1,unsigned int *an2,unsigned int *aResult ,int &nLen1,int &nLen2)
{
int i,j;
for( i = 0;i < nLen2; i ++ ) { //每一轮都用 an1 的一位,去和 an2 各位相乘
//从 an1 的个位开始
for( j = 0; j < nLen1; j ++ ) //用选定的 an1 的那一位,去乘 an2的各位
aResult[i+j] += an2[i]*an1[j]; //两数第i, j 位相乘,累加到结果的第 i+j 位
}
//下面的循环统一处理进位问题
for( i = 0; i < MAX_LEN * 2; i ++ ) {
if( aResult[i] >= 10 ) {
aResult[i+1] += aResult[i] / 10;
aResult[i] %= 10;
}
}
nLen2=nLen2+nLen1+1;
memcpy(an2,aResult,MAX_LEN*2+10);
memset(aResult,0,MAX_LEN*2+10);
}
int main()
{
int n;
while(scanf("%s %d",szLine1,&n)!=EOF)
{
int i, j,k=-2,m;
int nLen1 = strlen( szLine1);
memset( an1, 0, sizeof(an1));
memset(an2,0,sizeof(an2));
memset( aResult, 0, sizeof(aResult));
j = 0;
for( i = nLen1 - 1;i >= 0 ; i --)
{
if(szLine1[i]=='.')
{
k=strlen(szLine1)-i-1;
continue;
}
an1[j++] = szLine1[i] - '0';
}
int nLen2 = strlen(szLine1);
for(j=0;j<nLen1;j++)
an2[j]=an1[j];
for(i=0;i<n-1;i++)
multi(an1,an2,aResult,nLen1,nLen2);
m=k*n;
for(i=nLen2;i>=m;i--)
if(an2[i]!=0)
{
m=i;
break;
}
for(i=0;i<nLen2;i++)
if(an2[i]!=0)
{
j=i;
break;
}
if(an2[m]==0)
printf(".");
else
printf("%u",an2[m]);
for(i=m-1;i>=j;i--)
{
printf("%u",an2[i]);
if(i==k*n)
printf(".");
}
printf("\n");
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator