标签:c++ iostream poj 编程 numbers
| Time Limit: 500MS | Memory Limit: 10000K | |
| Total Submissions: 147507 | Accepted: 36006 |
Description
Input
Output
Sample Input
95.123 12 0.4321 20 5.1234 15 6.7592 9 98.999 10 1.0100 12
Sample Output
548815620517731830194541.899025343415715973535967221869852721 .00000005148554641076956121994511276767154838481760200726351203835429763013462401 43992025569.928573701266488041146654993318703707511666295476720493953024 29448126.764121021618164430206909037173276672 90429072743629540498.107596019456651774561044010001 1.126825030131969720661201
Hint
C++
while(cin>>s>>n)
{
...
}
c
while(scanf("%s%d",s,&n)==2) //to see if the scanf read in as many items as you want
/*while(scanf(%s%d",s,&n)!=EOF) //this also work */
{
...
}
Source
ACcode:
#include <iostream>
#include <cstring>
#include <cstdio>
#define maxn 999999
using namespace std;
char a[10];
int add[10],ans[maxn],res[maxn],n,doc,len;
void put1(){
if(doc==-1){
bool flag=false;
for(int i=ans[0];i>=1;--i){
if(ans[i]!=0)flag=true;
if(flag)printf("%d",ans[i]);
}
}
else {
doc=5-doc;
doc*=n;
int flag1,flag2;
for(int i=1;i<=ans[0];++i)
if(ans[i]!=0){
flag1=i;
break;
}
for(int i=ans[0];i>=1;--i)
if(ans[i]!=0){
flag2=i;
break;
}
if(flag2<doc)flag2=doc;
if(flag1>doc)flag1=doc+1;
bool flag=false;
while(flag2>=flag1){
if(flag2==doc)putchar('.');
printf("%d",ans[flag2]);
flag2--;
}
}
putchar('\n');
}
void fun(){
memset(res,0,sizeof(res));
for(int i=1;i<=ans[0];i++) {
for (int j=1;j<=len;j++) {
res[i+j-1]+=ans[i]*add[j];
if (res[i+j-1]>9)
{
res[i+j] += res[i+j-1] / 10;
res[i+j-1] %= 10;
}
}
}
if(res[ans[0]+len-1]>9){
res[ans[0]+len]+=res[ans[0]+len-1]/10;
res[ans[0]+len-1]%=10;
}
ans[0]=ans[0]+len;
for(int i=1;i<=ans[0];i++)ans[i]=res[i];
}
int main(){
while(cin>>a>>n){
if(n==0){
printf("1\n");
continue;
}
memset(ans,0,sizeof(ans));
memset(add,0,sizeof(a));
doc=-1;len=6;
int i,j,cnt=0;
for(i=0;i<6;++i){
if(a[i]=='.'){
doc=i;
len=5;
}
if(a[i]=='0')cnt++;
}
if(cnt==len){
printf("0\n");
continue;
}
for(i=5,j=1;i>=0;--i)
if(i!=doc){
add[j]=(a[i]-'0');
ans[j]=add[j];
j++;
}
ans[0]=len;
for(i=1;i<n;++i)
fun();
put1();
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:c++ iostream poj 编程 numbers
原文地址:http://blog.csdn.net/zp___waj/article/details/47702205