hdu1099 lottery 假分式 字符串函数 strncpy sprintf 函数 数字输入字符数组 公约数


#include <cstdlib>  
#include <cstdio>  
#include <cassert>  
#include <cstring>  
#include <algorithm> 

long long GCD(long long a,long long b){
 if(b == 0)
  return a;
 
  return GCD(b,a%b);
}
int main(){
 long long n;
 while(scanf("%lld",&n) == 1 ){  //==2则表示输入2个数
  long long don = 1,num = 0;
  for(  long long i=1;i<=n;++i){
   num = num * i + n * don ;
   don = don * i;
   long long gcd = GCD(don,num);
   don/=gcd;
   num/=gcd;
  }
  if(num%don == 0)
   printf("%lld\n",num/don);
  else{
   static char strNum[1024],strDon[1024],strInt[1024];
   static char strWS[1024],strLn[1024];
   static char ws[]="                              ";
   static char ln[]="------------------------------";
  sprintf(strNum,"%lld",num % don);
  sprintf(strInt,"%lld",num / don);
  sprintf(strDon,"%lld",don);
  
  memset(strWS,0,sizeof(strWS));
  strncpy(strWS,ws,strlen(strInt));

  memset(strLn,0,sizeof(strLn));
  strncpy(strLn,ln,std::max(strlen (strNum), strlen (strDon)));
              printf ("%s %s\n%s %s\n%s %s\n", strWS, strNum, strInt,strLn,  strWS, strDon);  
        
  }
 }
  return 0; 
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值