微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

HDU1517(大数运算)

A Multiplication Game

Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 2540    Accepted Submission(s): 1452


Problem Description
Stan and Ollie play the game of multiplication by multiplying an integer p by one of the numbers 2 to 9. Stan always starts with p = 1,does his multiplication,then Ollie multiplies the number,then Stan and so on. Before a game starts,they draw an integer 1 < n < 4294967295 and the winner is who first reaches p >= n.
 


 

Input
Each line of input contains one integer number n.
 


 

Output
For each line of input output one line either

Stan wins.

or

Ollie wins.

assuming that both of them play perfectly.
 


 

Sample Input
  
  
162 17 34012226
 


 

Sample Output
  
  
Stan wins. Ollie wins. Stan wins.

 

#include<iostream>
#include<iomanip>
using namespace std;
int fab(int a[],int b[],int len,int c[])
{
 int i,temp=0;
 for(i=0;i<len;i++)
 {
  c[i]=(a[i]+b[i]+temp)%10000;
  temp=(a[i]+b[i]+temp)/10000;
 }
 if(temp!=0){c[i]=temp;i++;}
 return i;
}
void copy(int a[],int len)
{
 int i;
 for(i=0;i<len;i++)
 {
  a[i]=b[i];
 }
}

int main() {  int a[110],b[110],c[110],n,m,len,j,i;  cin>>n;  while(n--)  {   cin>>m;   memset(a,sizeof(int)*110);   memset(b,sizeof(int)*110);   memset(c,sizeof(int)*110);   a[0]=1;b[0]=1;   len=1;   if(m<3)cout<<"1"<<endl;   else   {    for(i=3;i<=m;i++)    {     len=fab(a,b,c);     copy(a,len);     copy(b,c,len);    }    cout<<c[len-1];    for(i=len-2;i>=0;i--)     cout<<setfill('0')<<setw(4)<<c[i];    cout<<endl;       }  }  return 0; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐