ZOJ - 1210 的大整数乘法

题目:https://vjudge.net/contest/201179#problem/B
思路:
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
#include<set>
using namespace std;
int la;
int lb;
int lc;
int ling;
int a[100];
int b[100];
int c[100];
int n;//指数
void jie(int x){
 n=1;
 memset(b,0,sizeof(b));
 b[0]=x;
 while(1)
 {
  if(b[lb-1]==a[la-1] && lb==la) break;//在x得n次方中只要长度相同,最高为相同,n必唯一 .
  bool flag=0;
  for(int i=0;i<lb;i++)//大整数乘法
  {
   b[i]=b[i]*x;     //
  }
  for(int i=0;i<lb;i++)//
  {
   b[i+1]+=b[i]/10;//这里很重要
   if(b[lb-1]>=10){//
    flag=1;     //
   }
   b[i]=b[i]%10;   //
  }
  if(flag){
   lb++;
  }
  n++;
 }
}
void suan(int x)
{
 memset(c,0,sizeof(c));
 c[0]=x;
 lc=1;
 bool flag;
 for(int i=1;i<n;i++)
 {
  flag=0;
  for(int j=0;j<lc;j++)//同样用大整数乘法乘n次x.
  {
   c[j]=c[j]*x;
  }
  for(int j=0;j<lc;j++)
  {
   c[j+1]+=c[j]/10;
   if(c[lc-1]>=10){
    flag=1;
   }
   c[j]=c[j]%10;
  }
  if(flag){
   lc++;
  }
  
 }
 
}
int main()
{
 puts("Problem 4 by team x"); 
 char s[100];
 while(scanf("%s",s)==1)
 {
  printf("\n1 / %s =\n", s); 
  lb=1;
  la=0;
  ling=0;
  int l=strlen(s);
  while(s[l-1]=='0'){
   ling++;
   l--;
  }
  if(l==1 && s[0]=='1'){
   for(int i=0;i<ling;i++)
   {
    printf("0");
    if(i==0) printf(".");
   }
   printf("1\n");
   continue;
  }
  for(int i=0;i<l;i++)
  {
   a[i]=(int)s[l-i-1]-48;
   la++;
  }
  ling+=la;
  if(a[0]==5) {
   jie(5);suan(2);
  }
  else {
   jie(2);suan(5);
  }
  for(int i=0;i<ling;i++)//先输出0
  {
   printf("0");
   if(i==0) printf(".");
  }
  for(int i=lc-1;i>=0;i--)//记住最高为在最后
  {
   printf("%d",c[i]);
  }
  printf("\n");
 }
 puts("End of problem 4 by team x"); 
 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值