sicily 1381(高精度)

本文介绍了一种使用C++编程语言实现大整数乘法的方法,通过字符串转换为数字数组进行计算,并处理进位问题,最终输出乘法结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
 #include "iostream"
#include "string"
#include "string.h"
#include "sstream"
using namespace std;
int main ()
{
 int T;
 string str1, str2;//输入的两个整数用字符串来表示
 cin >> T;
 while (T--)
 {
  cin >> str1 >> str2;
  int length1 = str1.size();
  int length2 = str2.size();
  int *a = new int [length1];
  int *b = new int [length2];
  for (int i = 0; i < length1 ; i++)//将字符串转化为数字,保存在数组中
  {
   stringstream s1;
   s1 << str1[i];
   s1 >> a[i];
  }
  for (int i = 0; i < length2 ; i++)
  {
   stringstream s2;
   s2 << str2[i];
   s2 >> b[i];
  }
  int *c = new int [length1 + length2];//c数组存放两整数相乘的结果
  memset(c, 0, 4*(length1+length2));
  int s = 0;
  for (int i = length2-1; i >= 0; i--, s++)
  {
   int k = s;
   for (int j = length1-1; j >= 0 ; j--)//根据乘法相乘的规律来得出结果
   {
    c[k] += a[j] * b[i];
    k = k + 1;
   }
  }
  for (int i = 0; i < (length1 + length2); i++)//判断是否需要进位!
   if (c[i] >= 10)
   {
    c[i+1] += c[i] / 10;
    c[i] = c[i] % 10;
   }
  int q;
  for (q = (length1 + length2)-1; q >= 0  ; q--)//判断数组前面是否存在0,如果存在就去掉!
  {
   if (c[q] != 0)
   {
    for (int i = q; i >= 0; i--)
             cout << c[i];
    break;
   }
   if (q == 0) //如果数组存放的全部是0,就输出0即可!
    cout << 0 ;
  }
  cout << endl;
  }
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值