0
点赞
收藏
分享

微信扫一扫

工作室课题第三周笔记

Python百事通 2022-04-03 阅读 93
c++

高精度乘法

Description

在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263。要想计算更加规模的数,就要用软件来扩展了,比如用数组或字符串来模拟更多规模的数及共运算。

现在输入两个整数,请输出它们的乘积。

Input

两行,每行一个正整数,每个整数不超过10000位

Output

一行,两个整数的乘积。

Sample Input 1 

99
101

Sample Output 1

9999

代码:

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
 string a;
 string b;
 int flag=2;
 int max;
 int len;
 int u;
 int c[20002]={0};
 int  e[10001];
 int  d[10001];
    cin>>a;
 cin>>b;
for(int i=0,l=a.length()-1;i<a.length();)
 e[l--]=a[i++]-'0';
 for(int j=0,m=b.length() -1;j<b.length();)
 d[m--]=b[j++]-'0';
 if(a.length()>b.length())//a的长度长一些 
 {
  len=b.length();
  flag=1;
  max=a.length(); 
 }
 else//b 的长度长一些 
 {
 len=a.length();
 flag=0;
 max=b.length();
 }
 
 if(flag==0)
 {
  for(int i=0;i<len;i++)//短的控制外层循环,每一个和内层循环的相乘 
  {
      int k=i;
    for(int j=0;j<max;j++)
   {
    int s=c[k]+e[i]*d[j];
    c[k]=s%10;
    c[k+1]=s/10+c[k+1];
    k++;
    } 
   } 
 }
  else 
  {
   for(int i=0;i<len;i++)//短的控制外层循环,每一个和内层循环的相乘 
  {
      int k=i;
   for(int j=0;j<max;j++)
   {
    int s=c[k]+d[i]*e[j];
    c[k]=s%10;
    c[k+1]=s/10+c[k+1];
    k++;
    } 
   } 
  }
  
  for(int x=20000;x>=0;x--)
    {
  if(c[x]!=0)
  {
  u=x;
  break; 
  }
  
    }
 for(int o=u;o>=0;o--)
 {
  cout<<c[o];
    
     }
 return 0;
}

学习心得:利用循环,控制外层循环,每一个和内层循环的相乘。

举报

相关推荐

第三周笔记总结 2022.02.13

工作室课题4

冲刺第三周

第三周作业

第三周总结

第三周周四

第三周练习总结

0 条评论